diff --git a/docs/api-content/api-docs/edge-v1/emc-api.json b/docs/api-content/api-docs/edge-v1/emc-api.json index 744221602c..c12abe6205 100644 --- a/docs/api-content/api-docs/edge-v1/emc-api.json +++ b/docs/api-content/api-docs/edge-v1/emc-api.json @@ -963,6 +963,12 @@ "$ref": "#/definitions/v1AcceptedResponseWithMessage" } }, + "400": { + "description": "Bad request, invalid input", + "schema": { + "$ref": "#/definitions/v1Error" + } + }, "500": { "description": "(empty)", "schema": { @@ -2384,6 +2390,9 @@ "$ref": "#/definitions/v1Nic" } }, + "nodeRole": { + "$ref": "#/definitions/v1NodeRole" + }, "paletteEndpointURL": { "type": "string" } @@ -2407,9 +2416,6 @@ }, "ntp": { "$ref": "#/definitions/v1NTP" - }, - "registrationStatus": { - "$ref": "#/definitions/v1Registration" } } }, @@ -3156,6 +3162,15 @@ "v1NoContent": { "description": "No Content" }, + "v1NodeRole": { + "type": "string", + "enum": [ + "init", + "controlplane", + "worker", + "unknown" + ] + }, "v1NotFound": { "description": "Resource not found" }, @@ -3451,15 +3466,6 @@ } } }, - "v1Registration": { - "description": "Registration status of the edge host.", - "type": "string", - "enum": [ - "Paired", - "Unpaired", - "Not Applicable" - ] - }, "v1RelatedObject": { "description": "The object for which the event is related", "type": "object", @@ -3506,10 +3512,6 @@ "v1Settings": { "type": "object", "properties": { - "hasHarborPack": { - "type": "boolean", - "default": false - }, "installationMode": { "type": "string", "enum": [ diff --git a/docs/api-content/api-docs/palette-apis.json b/docs/api-content/api-docs/palette-apis.json index 662cf159a2..f7f82c21fd 100644 --- a/docs/api-content/api-docs/palette-apis.json +++ b/docs/api-content/api-docs/palette-apis.json @@ -21503,7 +21503,12 @@ }, "type": { "description": "Type indicates DDNS or VIP", - "type": "string" + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] } } }, @@ -21861,7 +21866,12 @@ }, "type": { "description": "Type indicates DDNS or VIP", - "type": "string" + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] } } }, @@ -100267,55 +100277,6 @@ } } } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the packs", - "operationId": "v1PacksSummaryDelete", - "parameters": [ - { - "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "Properties to send back after deletion operation", - "properties": { - "count": { - "type": "integer", - "format": "int64" - }, - "items": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - } - } } }, "/v1/packs/search": { @@ -119844,7 +119805,12 @@ }, "type": { "description": "Type indicates DDNS or VIP", - "type": "string" + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] } } }, @@ -120892,7 +120858,12 @@ }, "type": { "description": "Type indicates DDNS or VIP", - "type": "string" + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] } } }, @@ -121537,7 +121508,12 @@ }, "type": { "description": "Type indicates DDNS or VIP", - "type": "string" + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] } } }, @@ -139038,14 +139014,945 @@ "additionalProperties": { "type": "string" } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Tke Cluster validation response", + "schema": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/upgrade/settings": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get cluster settings by context", + "operationId": "v1SpectroClustersUpgradeSettingsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "properties": { + "spectroComponents": { + "type": "string", + "enum": [ + "lock", + "unlock" + ] + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update all clusters upgrade settings", + "operationId": "v1SpectroClustersUpgradeSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "spectroComponents": { + "type": "string", + "enum": [ + "lock", + "unlock" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/validate/name": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates the cluster name", + "operationId": "v1SpectroClustersValidateName", + "parameters": [ + { + "type": "string", + "description": "Cluster name", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/validate/packs": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates spectro cluster packs", + "operationId": "v1SpectroClustersValidatePacks", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster entity for pack refs validate", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster packs validation response", + "schema": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" } } } + }, + "name": { + "type": "string" } } } } } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" } } } @@ -139053,8 +139960,252544 @@ } } } - ] + } } + }, + "/v1/spectroclusters/virtual": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Creates a virtual cluster", + "operationId": "v1SpectroClustersVirtualCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro virtual cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "clusterConfig" + ], + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/virtual/packs/values": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the cluster pack values yaml", + "operationId": "v1VirtualClustersPacksValues", + "parameters": [ + { + "enum": [ + "k3s", + "cncf_k8s" + ], + "type": "string", + "default": "k3s", + "description": "Kubernetes distribution type", + "name": "kubernetesDistroType", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Successful response", + "schema": { + "description": "Virtual cluster packs values", + "type": "object", + "properties": { + "packs": { + "type": "array", + "items": { + "description": "Virtual cluster packs value", + "type": "object", + "properties": { + "distroType": { + "type": "string" + }, + "layer": { + "type": "string" + }, + "values": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/virtual/validate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates virtual cluster create operation", + "operationId": "v1SpectroClustersVirtualValidate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro virtual cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "clusterConfig" + ], + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Virtual Cluster validation response", + "schema": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/vsphere": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Creates a vSphere cluster", + "operationId": "v1SpectroClustersVsphereCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "vSphere cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "edgeHostUid": { + "description": "Appliance (Edge Host) uid for Edge env", + "type": "string" + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/vsphere/import": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Imports a vSphere cluster", + "operationId": "v1SpectroClustersVsphereImport", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro Vsphere cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/vsphere/rate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get vSphere cluster estimated rate information", + "operationId": "v1SpectroClustersVsphereRate", + "parameters": [ + { + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "type": "string", + "default": "hourly", + "name": "periodType", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Vsphere cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Vsphere Cluster estimated rate response", + "schema": { + "description": "Cluster estimated rate information", + "type": "object", + "properties": { + "machinePools": { + "type": "array", + "items": { + "description": "Machine pool estimated rate information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "rate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "resourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/vsphere/validate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates vSphere cluster create operation", + "operationId": "v1SpectroClustersVsphereValidate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "vSphere cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "edgeHostUid": { + "description": "Appliance (Edge Host) uid for Edge env", + "type": "string" + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "vSphere Cluster validation response", + "schema": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster", + "operationId": "v1SpectroClustersGet", + "parameters": [ + { + "type": "string", + "description": "Comma separated tags like system,profile", + "name": "includeTags", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Resolve pack values if set to true", + "name": "resolvePackValues", + "in": "query" + }, + { + "type": "string", + "description": "Includes pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" + }, + { + "type": "string", + "description": "Filter cluster profile templates by profileType", + "name": "profileType", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Include non spectro labels in the cluster labels if set to true", + "name": "includeNonSpectroLabels", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "SpectroCluster is the Schema for the spectroclusters API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SpectroClusterSpec defines the desired state of SpectroCluster", + "type": "object", + "properties": { + "cloudConfigRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "machineHealthConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + } + }, + "clusterProfileTemplates": { + "description": "When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterType": { + "type": "string", + "enum": [ + "PureManage", + "AlloyMonitor", + "AlloyAssist", + "AlloyExtend" + ] + } + } + }, + "status": { + "description": "SpectroClusterStatus", + "type": "object", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { + "description": "Spectro cluster addon service", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified cluster", + "operationId": "v1SpectroClustersDelete", + "parameters": [ + { + "type": "boolean", + "description": "If set to true the cluster will be force deleted and user has to manually clean up the provisioned cloud resources", + "name": "forceDelete", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/assets": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the cluster asset doc", + "operationId": "v1SpectroClustersUidAssetsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster asset", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "frpKubeconfig": { + "type": "string" + }, + "kubeconfig": { + "type": "string" + }, + "kubeconfigclient": { + "type": "string" + }, + "manifest": { + "type": "string" + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Associate the assets for the cluster", + "operationId": "v1SpectroClustersUidAssets", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster asset", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "frpKubeconfig": { + "type": "string" + }, + "kubeconfig": { + "type": "string" + }, + "kubeconfigclient": { + "type": "string" + }, + "manifest": { + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/assets/adminKubeconfig": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's kube config file", + "operationId": "v1SpectroClustersUidAdminKubeConfig", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/assets/frpKubeconfig": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's frp kube config file", + "operationId": "v1SpectroClustersUidFrpKubeConfigGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster's frp kube config data", + "operationId": "v1SpectroClustersUidFrpKubeConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster asset Frp Kube Config", + "type": "object", + "properties": { + "frpKubeconfig": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the cluster's frp kube config client data", + "operationId": "v1SpectroClustersUidFrpKubeConfigDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/assets/kubeconfig": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's kube config file", + "operationId": "v1SpectroClustersUidKubeConfig", + "parameters": [ + { + "type": "boolean", + "default": true, + "description": "FRP (reverse-proxy) based kube config will be returned if available", + "name": "frp", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster's manifest data", + "operationId": "v1SpectroClustersUidKubeConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster asset Kube Config", + "type": "object", + "properties": { + "kubeconfig": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/assets/kubeconfigclient": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's kube config client file", + "operationId": "v1SpectroClustersUidKubeConfigClientGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster's kube config client data", + "operationId": "v1SpectroClustersUidKubeConfigClientUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster asset Kube Config Client", + "type": "object", + "properties": { + "kubeconfigclient": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the cluster's kube config client data", + "operationId": "v1SpectroClustersUidKubeConfigClientDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/assets/manifest": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's manifest data", + "operationId": "v1SpectroClustersUidManifestGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster's manifest data", + "operationId": "v1SpectroClustersUidManifestUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster asset", + "type": "object", + "properties": { + "manifest": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/clusterConfig/clusterMetaAttribute": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster meta attribute", + "operationId": "v1SpectroClustersUidClusterMetaAttributeUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster additional metadata entity", + "type": "object", + "properties": { + "clusterMetaAttribute": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/clusterConfig/controlPlaneHealthCheckTimeout": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster controlPlane health check timeout", + "operationId": "V1ControlPlaneHealthCheckTimeoutUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes", + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/clusterConfig/hostCluster": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster host config", + "operationId": "V1HostClusterConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/clusterConfig/lifecycleConfig": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster Life cycle configuration", + "operationId": "v1SpectroClustersUidLifecycleConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/clusterConfig/osPatch": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster OS patch configuration", + "operationId": "v1SpectroClustersUidOsPatchUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/config/namespaces": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves namespaces for the specified cluster", + "operationId": "v1SpectroClustersUidConfigNamespacesGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + }, + "status": { + "description": "Cluster namespace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates namespaces for the specified cluster", + "operationId": "v1SpectroClustersUidConfigNamespacesUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/config/namespaces/{namespaceUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves the specified namespace of the cluster", + "operationId": "v1SpectroClustersUidConfigNamespacesUidGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster's namespace response", + "schema": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + }, + "status": { + "description": "Cluster namespace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified namespace of the cluster", + "operationId": "v1SpectroClustersUidConfigNamespacesUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster namespace uid", + "name": "namespaceUid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/config/rbacs": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves RBAC information for the specified cluster", + "operationId": "v1SpectroClustersUidConfigRbacsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates RBAC information for the specified cluster", + "operationId": "v1SpectroClustersUidConfigRbacsUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/config/rbacs/{rbacUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves the specified RBAC of the cluster", + "operationId": "v1SpectroClustersUidConfigRbacsUidGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster's RBAC response", + "schema": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified RBAC of the cluster", + "operationId": "v1SpectroClustersUidConfigRbacsUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "RBAC resource uid", + "name": "rbacUid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/download": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Download the specified cluster", + "operationId": "v1SpectroClustersUidDownload", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download cluster archive file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/edge-native/edgeHosts": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of edge host of edge-native cluster", + "operationId": "v1EdgeNativeClustersHostsList", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "List of edge host device", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "aclmeta": { + "description": "Resource access control information (Read-only response data)", + "type": "object", + "properties": { + "ownerUid": { + "description": "User or service uid which created the resource", + "type": "string" + }, + "projectUid": { + "description": "Project's uid if the resource is under a project", + "type": "string" + }, + "tenantUid": { + "description": "Tenant's uid", + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", + "type": "object", + "properties": { + "cloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "type": "object", + "properties": { + "vsphere": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "EdgeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "type": "string", + "format": "password", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "properties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "storagePools": { + "type": "array", + "items": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "service": { + "description": "ServiceSpec defines the specification of service registering edge", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "type": { + "description": "Deprecated. Cloudtype of the provisioned edge host", + "type": "string", + "enum": [ + "libvirt", + "vsphere", + "edge-native" + ] + }, + "version": { + "type": "string" + } + } + }, + "status": { + "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "serviceAuthToken": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/backup": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the cluster backup result", + "operationId": "v1ClusterFeatureBackupGet", + "parameters": [ + { + "type": "string", + "name": "backupRequestUid", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster Backup", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Backup Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "config": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + }, + "status": { + "description": "Cluster Backup Status", + "properties": { + "clusterBackupStatuses": { + "type": "array", + "items": { + "description": "Cluster Backup Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupConfig": { + "description": "Backup config", + "properties": { + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "backupLocationConfig": { + "description": "Backup location configuration", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupRequestUid": { + "type": "string" + }, + "backupStatusMeta": { + "type": "array", + "items": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "restoreStatusMeta": { + "type": "array", + "items": { + "description": "Backup restored status", + "properties": { + "backupName": { + "type": "string" + }, + "destinationClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "restoreState": { + "type": "string" + } + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update cluster backup settings", + "operationId": "v1ClusterFeatureBackupUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create cluster backup settings", + "operationId": "v1ClusterFeatureBackupCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Reset cluster backup schedule settings", + "operationId": "v1ClusterFeatureBackupScheduleReset", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/backup/onDemand": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create on demand cluster backup", + "operationId": "v1ClusterFeatureBackupOnDemandCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/backup/{backupName}/request/{requestUid}": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete cluster backup", + "operationId": "v1ClusterFeatureBackupDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "backupName", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "requestUid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the compliance scan of cluster, if driverType is provided then specific status of driverType will be returned", + "operationId": "v1ClusterFeatureComplianceScanGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster Compliance Scan", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverSpec": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan driver spec", + "properties": { + "config": { + "description": "Compliance Scan config", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "isClusterConfig": { + "type": "boolean" + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update cluster compliance scan settings", + "operationId": "v1ClusterFeatureComplianceScanUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create cluster compliance scan", + "operationId": "v1ClusterFeatureComplianceScanCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the compliance scan log by cluster uid and driver type", + "operationId": "v1ClusterFeatureComplianceScanLogsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster compliance scan Logs", + "properties": { + "kubeBenchLogs": { + "type": "array", + "items": { + "description": "Cluster compliance scan KubeBench Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeBench Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "kubeHunterLogs": { + "type": "array", + "items": { + "description": "Cluster compliance scan KubeHunter Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeHunter Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilites": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "sonobuoyLogs": { + "type": "array", + "items": { + "description": "Cluster compliance scan Sonobuoy Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Sonobuoy Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "syftLogs": { + "type": "array", + "items": { + "description": "Cluster Compliance Scan Syft Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Syft Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/kubeBench": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the KubeBench compliance scan log by uid", + "operationId": "v1ClusterFeatureScanKubeBenchLogUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "KubeBench response", + "required": [ + "requestUid", + "status", + "reports" + ], + "properties": { + "reports": { + "type": "object", + "additionalProperties": { + "description": "KubeBench report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "KubeBench log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/kubeHunter": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the KubeHunter compliance scan log by uid", + "operationId": "v1ClusterFeatureScanKubeHunterLogUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "KubeHunter response", + "required": [ + "requestUid", + "status", + "reports" + ], + "properties": { + "reports": { + "type": "object", + "additionalProperties": { + "description": "KubeHunter report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "KubeHunter log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "description": "KubeHunter vulnerability data", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/sonobuoy": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the Sonobuoy compliance scan log by uid", + "operationId": "v1ClusterFeatureScanSonobuoyLogUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Sonobuoy response", + "required": [ + "requestUid", + "status", + "reports" + ], + "properties": { + "reports": { + "type": "object", + "additionalProperties": { + "description": "Sonobuoy report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Sonobuoy log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/syft": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the Syft compliance scan log by uid", + "operationId": "v1ClusterFeatureScanSyftLogUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Syft response", + "required": [ + "requestUid", + "status", + "report" + ], + "properties": { + "report": { + "description": "Syft report", + "properties": { + "batchNo": { + "type": "integer", + "format": "int32" + }, + "batchSize": { + "type": "integer", + "format": "int32" + }, + "dependencies": { + "type": "array", + "items": { + "description": "Syft dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "sbom": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Syft vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Syft vulnerability summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete the compliance scan log by uid", + "operationId": "v1ClusterFeatureComplianceScanLogDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/kubeBench": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the KubeBench compliance scan log by uid", + "operationId": "v1ClusterFeatureKubeBenchLogGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster compliance scan KubeBench Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeBench Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "reportId", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/kubeHunter": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the KubeHunter compliance scan log by uid", + "operationId": "v1ClusterFeatureKubeHunterLogGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster compliance scan KubeHunter Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeHunter Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilites": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "reportId", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/sonobuoy": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the Sonobuoy compliance scan log by uid", + "operationId": "v1ClusterFeatureSonobuoyLogGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster compliance scan Sonobuoy Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Sonobuoy Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "reportId", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/syft": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the Syft compliance scan log by uid", + "operationId": "v1ClusterFeatureSyftLogGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster Compliance Scan Syft Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Syft Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/syft/sbom": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the image sbom of syft scan log of cluster", + "operationId": "v1SyftScanLogImageSBOMGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "image", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/{driver}/download": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Downloads the driver cluster logs", + "operationId": "v1ClusterFeatureDriverLogDownload", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + }, + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "logUid", + "in": "path", + "required": true + }, + { + "enum": [ + "kubeBench", + "kubeHunter", + "sonobuoy", + "syft" + ], + "type": "string", + "name": "driver", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "pdf", + "name": "fileFormat", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/onDemand": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create on demand cluster compliance scan", + "operationId": "v1ClusterFeatureComplianceScanOnDemandCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster compliance scan on demand configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan config for kube bench driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan config for kube hunter driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan config for sonobuoy driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "syft": { + "description": "Cluster compliance scan config for syft driver", + "properties": { + "config": { + "description": "Cluster compliance scan specification", + "properties": { + "format": { + "type": "string", + "enum": [ + "cyclonedx-json", + "github-json", + "spdx-json", + "syft-json" + ] + }, + "labelSelector": { + "type": "string" + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "cluster", + "namespace", + "label-selector", + "pod" + ] + } + } + }, + "runScan": { + "type": "boolean" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/helmCharts": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the installed helm charts of a specified cluster", + "operationId": "v1ClusterFeatureHelmChartsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster helm charts metadata", + "properties": { + "charts": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster helm chart metadata", + "properties": { + "localName": { + "type": "string" + }, + "matchedRegistries": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster helm registry information", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/logFetcher": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the log fetcher for cluster", + "operationId": "v1ClusterFeatureLogFetcherGet", + "parameters": [ + { + "type": "string", + "name": "requestId", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster Log Fetcher", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Log Fetcher Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "log": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster Log Fetcher Status", + "properties": { + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create the log fetcher for cluster", + "operationId": "v1ClusterFeatureLogFetcherCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster Log Fetcher Request", + "properties": { + "duration": { + "description": "Duration for which log is requested", + "type": "integer", + "format": "int64", + "default": 10 + }, + "k8s": { + "description": "Cluster Log Fetcher K8s", + "properties": { + "labelSelector": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "mode": { + "description": "Accepted Values - [\"cluster\", \"app\"]. if \"app\" then logs will be fetched from the virtual cluster", + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "app" + ] + }, + "noOfLines": { + "description": "No of lines of logs requested", + "type": "integer", + "format": "int64", + "default": 1000 + }, + "node": { + "description": "Cluster Log Fetcher Node Request", + "properties": { + "logs": { + "description": "Array of logs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid for which log is requested", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/manifests": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the installed manifests of a specified cluster", + "operationId": "v1ClusterFeatureManifestsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster manifests information", + "properties": { + "manifests": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster manifest information", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/restore": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the cluster restore of cluster", + "operationId": "v1ClusterFeatureRestoreGet", + "parameters": [ + { + "type": "string", + "name": "restoreRequestUid", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster Restore", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Restore Spec", + "properties": { + "clusterUid": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster Restore Status", + "properties": { + "clusterRestoreStatuses": { + "type": "array", + "items": { + "description": "Cluster Restore Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "restoreRequestUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Restore status meta", + "properties": { + "isSucceeded": { + "type": "boolean" + }, + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "sourceClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/restore/onDemand": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create on demand cluster restore", + "operationId": "v1ClusterFeatureRestoreOnDemandCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster restore config", + "required": [ + "backupRequestUid", + "backupName", + "destinationClusterUid" + ], + "properties": { + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "destinationClusterUid": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/import/manifest": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's import manifest file", + "operationId": "v1SpectroClustersUidImportManifest", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/import/upgrade": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Upgrade the specified imported read only cluster with full permissions", + "operationId": "v1SpectroClustersUidImportUpgradePatch", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/k8certificates": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get K8Certificate for spectro cluster", + "operationId": "v1SpectroClustersK8Certificate", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "type": "object", + "properties": { + "machineCertificates": { + "type": "array", + "items": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update K8Certificate for spectro cluster", + "operationId": "v1SpectroClustersK8CertificateUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "type": "object", + "properties": { + "machineCertificates": { + "type": "array", + "items": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "K8 Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/k8certificates/renew": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Sets the cluster control plane nodes Kubernetes certificates for renewal", + "operationId": "v1SpectroClustersCertificatesRenew", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/kubectl/redirect": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's kube config file", + "operationId": "V1SpectroClustersUidKubeCtlRedirect", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Active resources of tenant", + "type": "object", + "properties": { + "redirectUri": { + "type": "string" + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/location": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Associate the assets for the cluster", + "operationId": "v1SpectroClustersUidLocationPut", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster location", + "type": "object", + "properties": { + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/metadata": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the specified spectro cluster metadata", + "operationId": "v1SpectroClustersUidMetadataUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Resource metadata", + "type": "object", + "required": [ + "metadata" + ], + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/namespaces": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns available namespaces for the cluster", + "operationId": "v1ClusterNamespacesGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster's available namespaces", + "properties": { + "namespaces": { + "type": "array", + "items": { + "description": "Cluster's namespace", + "properties": { + "namespace": { + "type": "string" + }, + "pvcCount": { + "type": "number", + "format": "int32" + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "name": "skipEmptyNamespaces", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/oidc": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns k8s spectrocluster oidc", + "operationId": "V1SpectroClustersUidOIDC", + "parameters": [ + { + "type": "string", + "description": "spc uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "issuerTls": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/oidc/dashboard/url": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns k8s dashboard url", + "operationId": "V1SpectroClustersUidOIDCDashboardUrl", + "parameters": [ + { + "type": "string", + "description": "spc uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Service version information", + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/pack/manifests/{manifestUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's manifest", + "operationId": "v1SpectroClustersUidPackManifestsUidGet", + "parameters": [ + { + "type": "string", + "description": "cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "manifest uid which is part of the pack ref", + "name": "manifestUid", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "resolve pack manifest values if set to true", + "name": "resolveManifestValues", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Pack manifest content", + "schema": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "properties": { + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/pack/properties": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get specified cluster pack properties", + "operationId": "v1SpectroClustersUidPackProperties", + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Pack layer", + "name": "layer", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Pack values yaml field path", + "name": "fieldPath", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Pack name", + "name": "name", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Is the macros need to be resolved", + "name": "resolveMacros", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster's pack properties response", + "schema": { + "description": "Cluster pack properties response", + "type": "object", + "properties": { + "yaml": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/packRefs": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster's pack references", + "operationId": "v1SpectroClustersPacksRefUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster input for notification update", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile notification update request payload", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + }, + "spcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "notify", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/packs/resolvedValues": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's packs resolved values", + "operationId": "v1SpectroClustersUidPacksResolvedValuesGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster profiles resolved values response", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile resolved pack values", + "properties": { + "resolved": { + "description": "Cluster profile pack resolved values", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster profiles param reference entity", + "type": "object", + "properties": { + "references": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + ] + }, + "/v1/spectroclusters/{uid}/packs/status": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Patch update specified cluster's packs status", + "operationId": "v1SpectroClustersUidPacksStatusPatch", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ReadyForInstall", + "Installed", + "Ready", + "Error", + "UpgradeAvailable", + "WaitingForOtherLayers" + ] + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "profileUid": { + "description": "Cluster profile uid", + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/profileUpdates": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the profile updates of a specified cluster", + "operationId": "v1SpectroClustersGetProfileUpdates", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/profiles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the associated profiles of a specified cluster", + "operationId": "v1SpectroClustersGetProfiles", + "parameters": [ + { + "type": "string", + "description": "includes pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile spec response", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "version": { + "description": "Cluster profile version", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Associate cluster profiles to the specified cluster", + "operationId": "v1SpectroClustersUpdateProfiles", + "parameters": [ + { + "type": "boolean", + "default": false, + "description": "Resolve pending cluster notification if set to true", + "name": "resolveNotification", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "spcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Remove cluster profiles from the specified cluster", + "operationId": "v1SpectroClustersDeleteProfiles", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "profileUids": { + "description": "Cluster's profile uid list", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Patch cluster profiles to the specified cluster", + "operationId": "v1SpectroClustersPatchProfiles", + "parameters": [ + { + "type": "boolean", + "default": false, + "description": "Resolve pending cluster notification if set to true", + "name": "resolveNotification", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "spcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/profiles/packs/manifests": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the associated profile's pack manifests of a specified cluster", + "operationId": "v1SpectroClustersGetProfilesPacksManifests", + "parameters": [ + { + "type": "string", + "description": "Includes pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Resolve pack macro variables if set to true", + "name": "resolveMacros", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack manifests spec", + "type": "object", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/profiles/{profileUid}/packs/{packName}/config": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's profile pack configuration", + "operationId": "v1SpectroClustersUidProfilesUidPacksConfigGet", + "parameters": [ + { + "type": "string", + "description": "cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "profile uid", + "name": "profileUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "pack name", + "name": "packName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster pack values", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack configuration", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "associatedObject": { + "type": "string" + }, + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/profiles/{profileUid}/packs/{packName}/manifests": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the associated profiles pack manifests of the specified cluster", + "operationId": "v1SpectroClustersProfilesUidPackManifestsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Manifests array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "properties": { + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates cluster profiles pack manifests to the specified cluster", + "operationId": "v1SpectroClustersProfilesUidPackManifestsUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Pack manifests input params", + "properties": { + "manifests": { + "description": "Pack manifests array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile uid", + "name": "profileUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Name of the pack", + "name": "packName", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/rate": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the estimated rate of the specified cluster", + "operationId": "v1SpectroClustersUidRate", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Cluster estimated rate information", + "type": "object", + "properties": { + "machinePools": { + "type": "array", + "items": { + "description": "Machine pool estimated rate information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "rate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "resourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "type": "string", + "default": "hourly", + "description": "Period type [hourly, monthly, yearly]", + "name": "periodType", + "in": "query" + } + ] + }, + "/v1/spectroclusters/{uid}/repave/approve": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the spectrocluster repave approve update", + "operationId": "v1SpectroClustersUidRepaveApproveUpdate", + "parameters": [ + { + "type": "string", + "description": "cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + } + }, + "/v1/spectroclusters/{uid}/repave/status": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the spectrocluster repave", + "operationId": "v1SpectroClustersUidRepaveGet", + "parameters": [ + { + "type": "string", + "description": "cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Returns cluster repave status", + "schema": { + "description": "Spectro cluster repave status information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "reasons": { + "description": "Spectro cluster repave reasons", + "type": "array", + "items": { + "description": "Cluster repave reason description", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + } + }, + "source": { + "type": "string", + "enum": [ + "user", + "hubble", + "palette", + "stylus" + ] + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "status": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "repaveTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/reset": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "reset the cluster s by deleting machine pools and condtions", + "operationId": "V1SpectroClustersUidReset", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the cluster's status", + "operationId": "v1SpectroClustersUidStatus", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Spectrocluster status entity", + "type": "object", + "properties": { + "status": { + "description": "Spectrocluster state entity", + "type": "object", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/condition": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster status condition", + "operationId": "v1SpectroClustersUpdateStatusCondition", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/conditions": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster status conditions", + "operationId": "v1SpectroClustersUpdateStatusConditions", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/endpoints": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster's service endpoints information", + "operationId": "v1SpectroClustersUpdateStatusEndpoints", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/imported": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster status as imported", + "operationId": "v1SpectroClustersUpdateStatusImported", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/services": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified cluster's services information", + "operationId": "v1SpectroClustersUpdateStatusServices", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/spcApply": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the SPC apply information for the agent", + "operationId": "v1SpectroClustersUidStatusSpcApplyGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Set the CanBeApplied to true on the spcApply status. CanBeApplied indicates the agent to orchestrate the spc changes", + "operationId": "v1SpectroClustersUidStatusSpcApply", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/spcApply/patchTime": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the agent patch time for the SPC changes", + "operationId": "v1SpectroClustersUidStatusSpcPatchTime", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "clusterHash": { + "type": "string" + }, + "patchTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/status/upgrades": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster's upgrade status", + "operationId": "v1SpectroClustersUidUpgradesPut", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster status upgrades", + "type": "object", + "properties": { + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/upgrade/settings": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update specific cluster upgrade settings", + "operationId": "v1SpectroClustersUidUpgradeSettings", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "spectroComponents": { + "type": "string", + "enum": [ + "lock", + "unlock" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/validate/packs": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates cluster packs", + "operationId": "v1SpectroClustersUidValidatePacks", + "parameters": [ + { + "type": "string", + "description": "cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster entity for pack refs validate", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster packs validation response", + "schema": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/validate/repave": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates if cluster gets repaved for the specified packs", + "operationId": "v1SpectroClustersUidValidateRepave", + "parameters": [ + { + "type": "string", + "description": "cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster entity for pack refs validate", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster repave validation response", + "schema": { + "description": "Cluster repave validation response", + "type": "object", + "properties": { + "isRepaveRequired": { + "description": "If true then the pack changes can cause cluster repave", + "type": "boolean", + "x-omitempty": false + }, + "reasons": { + "type": "array", + "items": { + "description": "Cluster repave reason description", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/{uid}/variables": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieve a list of variables associated with the cluster", + "operationId": "v1SpectroClustersUidVariablesGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "type": "object", + "properties": { + "variables": { + "description": "List of unique variable fields with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid for which variables need to be retrieved", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the list of virtual machines", + "operationId": "v1SpectroClustersVMList", + "parameters": [ + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "Namespace names, comma separated value (ex: dev,test). If namespace is empty it returns the specific resource under all namespace", + "name": "namespace", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "VirtualMachineList is a list of virtual machines", + "type": "object", + "required": [ + "items" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "items": { + "type": "array", + "items": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "type": "object", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "type": "string" + }, + "remainingItemCount": { + "description": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + "type": "integer", + "format": "int64" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create virtual machine", + "operationId": "v1SpectroClustersVMCreate", + "parameters": [ + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/snapshot": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the list of snapshots of given namespaces", + "operationId": "v1ClusterVMSnapshotsList", + "parameters": [ + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "vmName is comma separated value (ex: name1,name2).", + "name": "vmName", + "in": "query" + }, + { + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv", + "description": "Namespace names, comma separated value (ex: dev,test). If namespace is empty it returns the specific resource under all namespace", + "name": "namespace", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "VirtualMachineSnapshotList is a list of VirtualMachineSnapshot resources", + "type": "object", + "required": [ + "metadata", + "items" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "items": { + "type": "array", + "items": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "type": "object", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "type": "string" + }, + "remainingItemCount": { + "description": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + "type": "integer", + "format": "int64" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get virtual machine", + "operationId": "v1SpectroClustersVMGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified virtual machine of the cluster", + "operationId": "v1SpectroClustersVMUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the virtual machine", + "operationId": "v1SpectroClustersVMDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/addVolume": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Add volume to the virtual machine instance", + "operationId": "v1SpectroClustersVMAddVolume", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "addVolumeOptions" + ], + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "dataVolumeTemplate": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + }, + "persist": { + "description": "If 'true' add the disk to the Virtual Machine \u0026 Virtual Machine Instance, else add the disk to the Virtual Machine Instance only", + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/clone": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Clone virtual machine", + "operationId": "v1SpectroClustersVMClone", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "cloneName" + ], + "properties": { + "annotationFilters": { + "description": "Annotation filters", + "type": "array", + "items": { + "type": "string" + } + }, + "cloneName": { + "description": "Cloning Virtual machine's name", + "type": "string" + }, + "labelFilters": { + "description": "Label filters", + "type": "array", + "items": { + "type": "string" + } + }, + "newMacAddresses": { + "description": "NewMacAddresses manually sets that target interfaces' mac addresses. The key is the interface name and the value is the new mac address. If this field is not specified, a new MAC address will be generated automatically, as for any interface that is not included in this map", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "newSMBiosSerial": { + "description": "NewSMBiosSerial manually sets that target's SMbios serial. If this field is not specified, a new serial will be generated automatically.", + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/migrate": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Migrate the virtual machine", + "operationId": "v1SpectroClustersVMMigrate", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/pause": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Pause the virtual machine instance", + "operationId": "v1SpectroClustersVMPause", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/removeVolume": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Remove volume from the virtual machine instance", + "operationId": "v1SpectroClustersVMRemoveVolume", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "removeVolumeOptions" + ], + "properties": { + "persist": { + "description": "If 'true' remove the disk from the Virtual Machine \u0026 Virtual Machine Instance, else remove the disk from the Virtual Machine Instance only", + "type": "boolean" + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/restart": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Restart the virtual machine", + "operationId": "v1SpectroClustersVMRestart", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/resume": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Resume the virtual machine instance", + "operationId": "v1SpectroClustersVMResume", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/snapshot": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create snapshot of virtual machine", + "operationId": "v1VMSnapshotCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name of virtual machine", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/snapshot/{snapshotName}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get virtual machine snapshot", + "operationId": "v1VMSnapshotGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified snapshot of a virtual machine", + "operationId": "v1VMSnapshotUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete the snapshot of virtual machine", + "operationId": "v1VMSnapshotDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Snapshot name", + "name": "snapshotName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/start": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Start the virtual machine", + "operationId": "v1SpectroClustersVMStart", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/stop": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Stop the virtual machine", + "operationId": "v1SpectroClustersVMStop", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Virtual Machine name", + "name": "vmName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Namespace name", + "name": "namespace", + "in": "query", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/workloads/sync": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Sync specified cluster workload", + "tags": [ + "v1" + ], + "summary": "Sync specified cluster workload", + "operationId": "v1SpectroClustersUidWorkloadsSync", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/workloads/{workloadKind}/sync": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Sync specified cluster workload", + "operationId": "v1SpectroClustersUidWorkloadsKindSync", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "enum": [ + "namespace", + "pod", + "deployment", + "statefulset", + "daemonset", + "job", + "cronjob", + "rolebinding", + "clusterrolebinding" + ], + "type": "string", + "description": "Workload kind", + "name": "workloadKind", + "in": "path", + "required": true + } + ] + }, + "/v1/system/config/reverseproxy": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1", + "system", + "private", + "docs-show" + ], + "summary": "get the system config reverse proxy", + "operationId": "V1SystemConfigReverseProxyGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "system config reverse proxy", + "properties": { + "caCert": { + "type": "string" + }, + "clientCert": { + "type": "string" + }, + "clientKey": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "protocol": { + "type": "string", + "enum": [ + "http", + "https" + ] + }, + "server": { + "type": "string" + }, + "vHostPort": { + "type": "integer" + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1", + "system", + "private", + "docs-show" + ], + "summary": "updates the system config reverse proxy", + "operationId": "V1SystemConfigReverseProxyUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "system config reverse proxy", + "properties": { + "caCert": { + "type": "string" + }, + "clientCert": { + "type": "string" + }, + "clientKey": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "protocol": { + "type": "string", + "enum": [ + "http", + "https" + ] + }, + "server": { + "type": "string" + }, + "vHostPort": { + "type": "integer" + } + } + } + } + ], + "responses": { + "204": { + "description": "(empty)", + "schema": { + "description": "The resource was updated successfully" + } + } + } + } + }, + "/v1/system/passwords/blocklist": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1", + "system", + "docs-show" + ], + "summary": "Delete a list of block listed passwords", + "operationId": "V1PasswordsBlockListDelete", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "List of blocklisted passwords", + "type": "object", + "properties": { + "spec": { + "description": "List of block listed passwords", + "type": "object", + "properties": { + "passwords": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1", + "system", + "docs-show" + ], + "summary": "List of block listed passwords", + "operationId": "V1PasswordsBlockListUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "List of blocklisted passwords", + "type": "object", + "properties": { + "spec": { + "description": "List of block listed passwords", + "type": "object", + "properties": { + "passwords": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "(empty)", + "schema": { + "description": "The resource was updated successfully" + } + } + } + } + }, + "/v1/teams": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of teams", + "operationId": "v1TeamsList", + "parameters": [ + { + "type": "string", + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "name": "fields", + "in": "query" + }, + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of teams", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Creates a team with the specified users and roles", + "operationId": "v1TeamsCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/teams/summary": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of teams summary with provided filter spec", + "operationId": "v1TeamsSummaryGet", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Teams filter summary spec", + "properties": { + "filter": { + "description": "Teams filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "An array of teams summary items", + "schema": { + "description": "Returns Team summary", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Team summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + } + } + } + } + } + } + }, + "/v1/teams/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the sepcified team", + "operationId": "v1TeamsUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the sepcified team", + "operationId": "v1TeamsUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified team", + "operationId": "v1TeamsUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Patches the specified team", + "operationId": "v1TeamsUidPatch", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/teams/{uid}/projects": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified team's project and roles data", + "operationId": "v1TeamsProjectRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the projects and roles for the specified team", + "operationId": "v1TeamsProjectRolesPut", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "projectUid": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/teams/{uid}/resourceRoles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns resource roles for team", + "tags": [ + "v1" + ], + "summary": "Returns the specified individual and resource roles for a team", + "operationId": "v1TeamsUidResourceRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "resourceRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Resource roles added to specific team", + "tags": [ + "v1" + ], + "summary": "Add resource roles for team", + "operationId": "v1TeamsUidResourceRolesCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "string" + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "string" + } + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/teams/{uid}/resourceRoles/{resourceRoleUid}": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deleted the resource roles from team", + "operationId": "v1TeamsUidResourceRolesUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Specific resource roles fo team is updated", + "tags": [ + "v1" + ], + "summary": "Updates the resource roles for team", + "operationId": "v1TeamsResourceRolesUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "string" + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "string" + } + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "resourceRoleUid", + "in": "path", + "required": true + } + ] + }, + "/v1/teams/{uid}/roles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified team's tenant roles", + "operationId": "V1TeamsUidTenantRolesGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the tenant roles of the specified team", + "operationId": "V1TeamsUidTenantRolesUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/address": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant address", + "operationId": "v1PatchTenantAddress", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant Address", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/assets/certs": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "lists the certificates for the tenant", + "operationId": "V1TenantUIdAssetsCertsList", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tenant cert", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "create the tenant certificate", + "operationId": "V1TenantUidAssetsCertsCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "tenant cert", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/assets/certs/{certificateUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the ca certificate for the tenant", + "operationId": "V1TenantUidAssetsCertsUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "tenant cert", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "updates the tenant certificate", + "operationId": "V1TenantUidAssetsCertsUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "tenant cert", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "deletes the tenant certificate", + "operationId": "V1TenantUidAssetsCertsUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "certificateUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/assets/dataSinks": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns data sink config of tenant", + "operationId": "V1TenantUidAssetsDataSinksGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Data sink", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "auditDataSinks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "cloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "cloudwatch" + ] + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "updates the tenant data sink config", + "operationId": "V1TenantUidAssetsDataSinksUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Data sink", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "auditDataSinks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "cloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "cloudwatch" + ] + } + } + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "create data sink config", + "operationId": "V1TenantUidAssetsDataSinksCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Data sink", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "auditDataSinks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "cloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "cloudwatch" + ] + } + } + } + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "deletes the tenant data sink config", + "operationId": "V1TenantUidAssetsDataSinksDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/authTokenSettings": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant auth token settings", + "operationId": "v1TenantUidAuthTokenSettingsGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "System auth token settings", + "properties": { + "expiryTimeMinutes": { + "description": "Auth token expiry time in minutes", + "type": "integer", + "format": "int32", + "maximum": 1440, + "minimum": 15, + "x-omitempty": false + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant auth token settings", + "operationId": "v1TenantUidAuthTokenSettingsUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "System auth token settings", + "properties": { + "expiryTimeMinutes": { + "description": "Auth token expiry time in minutes", + "type": "integer", + "format": "int32", + "maximum": 1440, + "minimum": 15, + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/contract/accept": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Tenant to accept the contract agreement", + "operationId": "v1TenantsUidContractAccept", + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/creditAccount/aws": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the credit accounts for the tenants with free tier access", + "operationId": "v1TenantsCreditAccountGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "creditLimitInDollars": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "creditUsedInDollars": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "loginCredentials": { + "type": "object", + "properties": { + "iamUser": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "userCloudAccount": { + "properties": { + "accountId": { + "type": "string" + }, + "cloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the aws credit account for tenants", + "operationId": "v1TenantsCreditAccountDelete", + "parameters": [ + { + "type": "boolean", + "default": false, + "name": "forceDelete", + "in": "query" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/domains": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "retrieves the domains for tenant", + "operationId": "V1TenantUidDomainsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Tenant domains", + "type": "object", + "properties": { + "domains": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "creates or updates domains for tenant", + "operationId": "V1TenantUidDomainsUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant domains", + "type": "object", + "properties": { + "domains": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/emailId": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant emailId", + "operationId": "v1PatchTenantEmailId", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant EmailId", + "type": "object", + "properties": { + "emailId": { + "type": "string" + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/freemium": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant level freemium configuration", + "operationId": "v1TenantFreemiumGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Tenant freemium configuration", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "totalUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant freemium configuration", + "operationId": "v1TenantFreemiumUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant freemium configuration", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "totalUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/freemiumUsage": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant freemium usage", + "operationId": "v1TenantFreemiumUsageGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "limit": { + "type": "object", + "properties": { + "activeClusters": { + "type": "integer", + "x-omitempty": false + }, + "overageUsage": { + "type": "number", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "type": "object", + "properties": { + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns a specified invoice", + "operationId": "v1InvoicesUidGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Invoice object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Invoice specification", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "billingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "credits": { + "description": "Invoice credits object", + "properties": { + "alloyFreeCredits": { + "description": "Credits allocated for import clusters", + "type": "number", + "format": "int64" + }, + "pureFreeCredits": { + "description": "Credits allocated for managed clusters", + "type": "number", + "format": "int64" + } + } + }, + "envType": { + "description": "Environment type [Trial,MonthlyOnDemand,AnnualSubscription,OnPrem]", + "type": "string" + }, + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "paymentUnit": { + "type": "string", + "enum": [ + "usd" + ] + }, + "plan": { + "description": "Invoice plan object", + "properties": { + "freeCredits": { + "description": "List of free credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + }, + "plantype": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "slaCredits": { + "description": "List of SLA credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + } + } + } + } + }, + "status": { + "description": "Invoice Status", + "properties": { + "billableAmount": { + "description": "Total billable amount", + "type": "number", + "format": "float64" + }, + "productInvoice": { + "description": "Product invoice object", + "properties": { + "alloy": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "projects": { + "description": "List of project invoices", + "type": "array", + "items": { + "description": "Invoice project object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "projectName": { + "description": "Name of the project", + "type": "string" + }, + "projectUid": { + "description": "Project identifier", + "type": "string" + }, + "usage": { + "description": "Project usage object", + "properties": { + "alloy": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + } + }, + "states": { + "description": "List of invoice states", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Invoice state object", + "properties": { + "paymentMsg": { + "description": "Payment status message", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Paid", + "PaymentPending", + "PaymentInProgress", + "PaymentFailed" + ] + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "stripeInvoiceId": { + "description": "Stripe invoice uid", + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the tenant uid", + "name": "tenantUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Specify the invoice uid", + "name": "invoiceUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/invoice/pdf": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Downloads the specified invoice report", + "operationId": "V1InvoiceUidReportInvoicePdf", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + }, + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the tenant uid", + "name": "tenantUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Specify the invoice uid", + "name": "invoiceUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/pdf": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Downloads the specified monthly invoice report", + "operationId": "V1InvoiceUidReportPdf", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + }, + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the tenant uid", + "name": "tenantUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Specify the invoice uid", + "name": "invoiceUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/usage/pdf": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Downloads the specified tenant usage", + "operationId": "V1InvoiceUidReportUsagePdf", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + }, + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the tenant uid", + "name": "tenantUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Specify the invoice uid", + "name": "invoiceUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/loginBanner": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant login banner settings", + "operationId": "v1TenantUidLoginBannerGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "Message": { + "description": "Login banner message displayed to the user", + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "description": "Set to 'true' if login banner has to be displayed for user", + "type": "boolean", + "x-omitempty": false + }, + "title": { + "description": "Banner title displayed to the user", + "type": "string", + "x-omitempty": false + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant login banner settings", + "operationId": "v1TenantUidLoginBannerUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "Message": { + "description": "Login banner message displayed to the user", + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "description": "Set to 'true' if login banner has to be displayed for user", + "type": "boolean", + "x-omitempty": false + }, + "title": { + "description": "Banner title displayed to the user", + "type": "string", + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/macros": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "List the macros of the specified tenant", + "operationId": "v1TenantsUidMacrosList", + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the macros of the specified tenant", + "operationId": "v1TenantsUidMacrosUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create or add new macros for the specified tenant", + "operationId": "v1TenantsUidMacrosCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete the macros for the specified tenant by given macro name", + "operationId": "v1TenantsUidMacrosDeleteByMacroName", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the macros for the specified tenant by given macro name", + "operationId": "v1TenantsUidMacrosUpdateByMacroName", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/oidc/config": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the oidc Spec for tenant", + "operationId": "V1TenantUidOidcConfigGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Tenant", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerTls": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoutUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "scopesDelimiter": { + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Associates the oidc Spec for the tenant", + "operationId": "V1TenantUidOidcConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerTls": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoutUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "scopesDelimiter": { + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/password/policy": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "creates or updates a password policy for tenant", + "operationId": "V1TenantUidPasswordPolicyUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant Password Policy Entity", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "expiryDurationInDays": { + "type": "integer" + }, + "firstReminderInDays": { + "type": "integer" + }, + "isRegex": { + "type": "boolean" + }, + "minLength": { + "type": "integer" + }, + "minNumOfBlockLetters": { + "type": "integer" + }, + "minNumOfDigits": { + "type": "integer" + }, + "minNumOfSmallLetters": { + "type": "integer" + }, + "minNumOfSpecialCharacters": { + "type": "integer" + }, + "regex": { + "type": "string" + }, + "updateTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/preferences/clusterGroup": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get is cluster group enabled for a specific tenant", + "operationId": "V1TenantPrefClusterGroupGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Enable or Disable cluster group for a tenant", + "properties": { + "hideSystemClusterGroups": { + "type": "boolean", + "x-omitempty": false + }, + "isClusterGroupEnabled": { + "description": "Deprecated. Use hideSystemClusterGroups field", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Enable or Disable cluster group for a specific tenant", + "operationId": "V1TenantPrefClusterGroupUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Enable or Disable cluster group for a tenant", + "properties": { + "hideSystemClusterGroups": { + "type": "boolean", + "x-omitempty": false + }, + "isClusterGroupEnabled": { + "description": "Deprecated. Use hideSystemClusterGroups field", + "type": "boolean", + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/preferences/clusterSettings": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant cluster settings", + "operationId": "v1TenantClusterSettingsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "properties": { + "nodesAutoRemediationSetting": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/preferences/clusterSettings/nodesAutoRemediationSetting": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant clusters nodes auto remediation setting", + "operationId": "v1TenantClustersNodesAutoRemediationSettingUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/preferences/developerCredit": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get developer credit enabled for a specific tenant", + "operationId": "V1TenantDeveloperCreditGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "update developer credit for a specific tenant", + "operationId": "V1TenantDeveloperCreditUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/preferences/fips": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant fips settings", + "operationId": "v1TenantFipsSettingsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "FIPS configuration", + "properties": { + "fipsClusterFeatureConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "fipsClusterImportConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "fipsPackConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant fips setting", + "operationId": "v1TenantFipsSettingsUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "FIPS configuration", + "properties": { + "fipsClusterFeatureConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "fipsClusterImportConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "fipsPackConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/rateConfig": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get all rate config for public and private cloud", + "operationId": "v1RateConfigGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Rate config", + "properties": { + "aws": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "azure": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "custom": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Private cloud rate config", + "properties": { + "cloudType": { + "type": "string" + }, + "rateConfig": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + } + }, + "edge": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "edgeNative": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "gcp": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "generic": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "libvirt": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "maas": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "openstack": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "vsphere": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "updates the rate config for public and private cloud", + "operationId": "v1RateConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Rate config", + "properties": { + "aws": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "azure": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "custom": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Private cloud rate config", + "properties": { + "cloudType": { + "type": "string" + }, + "rateConfig": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + } + }, + "edge": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "edgeNative": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "gcp": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "generic": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "libvirt": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "maas": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "openstack": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "vsphere": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/resourceLimits": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get tenant level resource limits configuration", + "operationId": "v1TenantResourceLimitsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Tenant resource limits", + "properties": { + "resources": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "label": { + "type": "string" + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "maxLimit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update tenant resource limits configuration", + "operationId": "v1TenantResourceLimitsUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.", + "properties": { + "resources": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/saml/config": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified service provider metadata and Saml Spec for tenant", + "operationId": "V1TenantUidSamlConfigSpecGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Tenant", + "type": "object", + "properties": { + "acsUrl": { + "type": "string" + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attributeValue": { + "type": "string" + }, + "mappedAttribute": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameFormat": { + "type": "string" + } + } + } + }, + "audienceUrl": { + "description": "same as entity id", + "type": "string" + }, + "certificate": { + "description": "certificate for slo", + "type": "string" + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + } + }, + "entityId": { + "type": "string" + }, + "federationMetadata": { + "type": "string" + }, + "identityProvider": { + "type": "string" + }, + "isSingleLogoutEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuer": { + "description": "same as entity id", + "type": "string" + }, + "nameIdFormat": { + "type": "string" + }, + "serviceProviderMetadata": { + "type": "string" + }, + "singleLogoutUrl": { + "description": "slo url", + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Associates the specified federation metadata for the tenant", + "operationId": "V1TenantUidSamlConfigUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Tenant", + "type": "object", + "properties": { + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attributeValue": { + "type": "string" + }, + "mappedAttribute": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameFormat": { + "type": "string" + } + } + } + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + } + }, + "federationMetadata": { + "type": "string" + }, + "identityProvider": { + "type": "string" + }, + "isSingleLogoutEnabled": { + "type": "boolean" + }, + "isSsoEnabled": { + "type": "boolean" + }, + "nameIdFormat": { + "type": "string" + }, + "syncSsoTeams": { + "type": "boolean" + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/tenants/{tenantUid}/sso/auth/providers": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "get sso logins for the tenants", + "operationId": "V1TenantUidSsoAuthProvidersGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "ssoLogins": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "enable sso logins for the tenants", + "operationId": "V1TenantUidSsoAuthProvidersUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "ssoLogins": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "tenantUid", + "in": "path", + "required": true + } + ] + }, + "/v1/users": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Lists users the given user context", + "tags": [ + "v1" + ], + "summary": "Lists users", + "operationId": "v1UsersList", + "parameters": [ + { + "type": "string", + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "name": "fields", + "in": "query" + }, + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "A user is created for the given user context", + "tags": [ + "v1" + ], + "summary": "Create User", + "operationId": "v1UsersCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User Entity input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/locations": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified users location", + "operationId": "v1UsersAssetsLocationGet", + "parameters": [ + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of locations", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Location specification", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean" + }, + "storage": { + "description": "Location type", + "type": "string", + "default": "s3", + "enum": [ + "s3", + "gcp", + "minio" + ] + }, + "type": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/users/assets/locations/azure": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create a Azure location", + "operationId": "v1UsersAssetsLocationAzureCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Azure location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Azure location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "Azure storage config object", + "type": "object", + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "Azure location type [azure]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/locations/azure/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified Azure location", + "operationId": "v1UsersAssetsLocationAzureGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Azure location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Azure location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "Azure storage config object", + "type": "object", + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "Azure location type [azure]", + "type": "string" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified Azure location", + "operationId": "v1UsersAssetsLocationAzureUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Azure location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Azure location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "Azure storage config object", + "type": "object", + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "Azure location type [azure]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the Azure location uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/locations/gcp": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create a GCP location", + "operationId": "v1UsersAssetsLocationGcpCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "GCP location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "GCP location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "GCP storage config object", + "type": "object", + "required": [ + "bucketName", + "credentials" + ], + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "GCP location type [gcp]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/locations/gcp/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified GCP location", + "operationId": "v1UsersAssetsLocationGcpGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "GCP location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "GCP location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "GCP storage config object", + "type": "object", + "required": [ + "bucketName", + "credentials" + ], + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "GCP location type [gcp]", + "type": "string" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified GCP location", + "operationId": "v1UsersAssetsLocationGcpUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "GCP location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "GCP location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "GCP storage config object", + "type": "object", + "required": [ + "bucketName", + "credentials" + ], + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "GCP location type [gcp]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the GCP location uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/locations/minio": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create a MinIO location", + "operationId": "v1UsersAssetsLocationMinioCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/locations/minio/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified MinIO location", + "operationId": "v1UsersAssetsLocationMinioGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified MinIO location", + "operationId": "v1UsersAssetsLocationMinioUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the MinIO location uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/locations/s3": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create a S3 location", + "operationId": "v1UsersAssetsLocationS3Create", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/locations/s3/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified S3 location", + "operationId": "v1UsersAssetsLocationS3Get", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified S3 location", + "operationId": "v1UsersAssetsLocationS3Update", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified S3 location", + "operationId": "v1UsersAssetsLocationS3Delete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the S3 location uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/locations/{type}/{uid}/default": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the default backup location", + "operationId": "v1UsersAssetsLocationDefaultUpdate", + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the location uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Specify the location type [aws/azure/gcp/minio/s3]", + "name": "type", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/locations/{uid}": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified location", + "operationId": "v1UsersAssetsLocationDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the location uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/sshkeys": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the SSH keys", + "operationId": "v1UsersAssetsSshGet", + "parameters": [ + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of SSH keys", + "type": "array", + "uniqueItems": true, + "items": { + "description": "SSH key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Creates a SSH key", + "operationId": "v1UserAssetsSshCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "SSH Key request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/sshkeys/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified user ssh key", + "operationId": "v1UsersAssetSshGetUid", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "SSH key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified user ssh key", + "operationId": "v1UsersAssetSshUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "SSH key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified user ssh key", + "operationId": "v1UsersAssetSshDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the SSH key uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/assets/vsphere/dnsMapping": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified vSphere DNS mapping", + "operationId": "v1VsphereMappingGet", + "parameters": [ + { + "type": "string", + "description": "Specify the vSphere gateway uid", + "name": "gatewayUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Specify the vSphere datacenter name", + "name": "datacenter", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Specify the vSphere network name", + "name": "network", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + } + } + } + } + }, + "/v1/users/assets/vsphere/dnsMappings": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified vSphere DNS mappings", + "operationId": "v1VsphereDnsMappingsGet", + "parameters": [ + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of vSphere DNS mapping", + "type": "array", + "uniqueItems": true, + "items": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create a vSphere DNS mapping", + "operationId": "v1VsphereDnsMappingCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/assets/vsphere/dnsMappings/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified vSphere DNS mapping", + "operationId": "v1VsphereDnsMappingGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified vSphere DNS mapping", + "operationId": "v1VsphereDnsMappingUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified vSphere DNS mapping", + "operationId": "v1VsphereDnsMappingDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the vSphere DNS mapping uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/auth/tokens/revoke": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Revoke access of specific token(s)", + "operationId": "v1UsersAuthTokensRevoke", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "tokens": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + } + }, + "/v1/users/config/scar": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the system Spectro repository. Restricted to edge services", + "operationId": "V1UsersConfigScarGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "system scar config spec", + "type": "object", + "properties": { + "baseContentPath": { + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureVerify": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + } + } + } + }, + "/v1/users/info": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns a basic information of User for the specified uid.", + "tags": [ + "v1" + ], + "summary": "Returns the base information of specified User", + "operationId": "v1UsersInfoGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "User basic information", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + } + } + } + } + }, + "/v1/users/kubectl/session/{sessionUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "gets users kubectl session", + "tags": [ + "v1" + ], + "summary": "gets users kubectl session", + "operationId": "V1UsersKubectlSessionUid", + "parameters": [ + { + "type": "string", + "name": "sessionUid", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "clusterUid": { + "type": "string" + }, + "creationTime": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "podIp": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "port": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "sessionUid": { + "type": "string" + }, + "shellyCluster": { + "type": "string" + }, + "tenantClusterEndpoint": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + } + } + } + } + }, + "/v1/users/meta": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of users metadata", + "operationId": "v1UsersMetadata", + "responses": { + "200": { + "description": "An array of users metadata items", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User meta entity", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/users/password/change": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User password change request via current password and emailId", + "tags": [ + "v1" + ], + "summary": "User password change request using the user emailId", + "operationId": "V1UsersPasswordChange", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "newPassword", + "emailId", + "currentPassword" + ], + "properties": { + "currentPassword": { + "type": "string" + }, + "emailId": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/password/reset": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User password request will be sent to the supplied emailId", + "tags": [ + "v1" + ], + "summary": "User password reset request using the email id", + "operationId": "v1UsersEmailPasswordReset", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "emailId" + ], + "properties": { + "emailId": { + "type": "string" + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/users/summary": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of users summary with provided filter spec", + "operationId": "v1UsersSummaryGet", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Users filter summary spec", + "properties": { + "filter": { + "description": "Users filter spec", + "properties": { + "emailId": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + } + } + ], + "responses": { + "200": { + "description": "An array of users summary items", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "projects": { + "description": "Deprecated.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectsCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/users/system/features": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns the users system feature", + "tags": [ + "v1" + ], + "summary": "Returns the users system feature", + "operationId": "v1UsersSystemFeature", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of system features", + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/users/system/macros": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "List the macros of the system", + "operationId": "v1UsersSystemMacrosList", + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the macros of the system", + "operationId": "v1UsersSystemMacrosUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create or add new macros for the system user", + "operationId": "v1UsersSystemMacrosCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete the macros for the system user by macro name", + "operationId": "v1UsersSystemMacrosDeleteByMacroName", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the macros for the system user by macro name", + "operationId": "v1UsersSystemMacrosUpdateByMacroName", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + } + }, + "/v1/users/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns a User for the specified uid.", + "tags": [ + "v1" + ], + "summary": "Returns the specified User", + "operationId": "v1UsersUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "A user is created for the given user context", + "tags": [ + "v1" + ], + "summary": "Update User", + "operationId": "v1UsersUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User Entity input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "description": "Deprecated. Use 'v1/users/{uid}/roles' API to assign roles.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Deletes the specified User for given uid", + "tags": [ + "v1" + ], + "summary": "Deletes the specified User", + "operationId": "v1UsersUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User is patched for the specified information", + "tags": [ + "v1" + ], + "summary": "Patches the specified User", + "operationId": "v1UsersUidPatch", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/password/change": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User password change request via current password", + "tags": [ + "v1" + ], + "summary": "User password change request using the user uid", + "operationId": "v1UsersUidPasswordChange", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "newPassword" + ], + "properties": { + "currentPassword": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + } + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/password/reset": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User password reset request, will send the password reset option through the emailId", + "tags": [ + "v1" + ], + "summary": "User password reset request using the user uid", + "operationId": "v1UsersUidPasswordReset", + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/projects": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns a User with projects and roles", + "tags": [ + "v1" + ], + "summary": "Returns the specified User Projects and Roles information", + "operationId": "v1UsersProjectRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User is updated with projects and roles", + "tags": [ + "v1" + ], + "summary": "Updates the projects and roles for user", + "operationId": "v1UsersProjectRolesPut", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "projectUid": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/resourceRoles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns resource roles for user", + "tags": [ + "v1" + ], + "summary": "Returns the specified individual and resource roles for a user", + "operationId": "v1UsersUidResourceRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "resourceRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Resource roles added to specific user", + "tags": [ + "v1" + ], + "summary": "Add resource roles for user", + "operationId": "v1UsersUidResourceRolesCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "string" + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "string" + } + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/resourceRoles/{resourceRoleUid}": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deleted the resource roles from user", + "operationId": "v1UsersUidResourceRolesUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Specific resource roles fo user is updated", + "tags": [ + "v1" + ], + "summary": "Updates the resource roles for user", + "operationId": "v1UsersResourceRolesUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "string" + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "string" + } + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "resourceRoleUid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/roles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns roles clubbed from team", + "tags": [ + "v1" + ], + "summary": "Returns the specified individual and team roles for a user", + "operationId": "v1UsersUidRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User is updated with roles", + "tags": [ + "v1" + ], + "summary": "Updates the roles for user", + "operationId": "v1UsersUidRolesUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/users/{uid}/status/loginMode": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Users status login mode", + "operationId": "v1UsersStatusLoginMode", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "loginMode": { + "type": "string", + "enum": [ + "dev", + "devops" + ] + } + } + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create workspace", + "operationId": "v1WorkspacesCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Workspace information", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace specifications", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "policies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/workspaces/teams/{teamUid}/roles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified team's workspaces and roles data", + "operationId": "v1TeamsWorkspaceGetRoles", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "List all workspaces with the roles assigned to the users", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "List projects and its workspaces", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace users and their roles", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the workspace roles for the specified team", + "operationId": "v1TeamsWorkspaceRolesPut", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "teamUid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/users/{userUid}/roles": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns a User with workspaces and roles", + "tags": [ + "v1" + ], + "summary": "Returns the specified User workspaces and Roles information", + "operationId": "v1UsersWorkspaceGetRoles", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "List all workspaces with the roles assigned to the users", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "List projects and its workspaces", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace users and their roles", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "User is updated with workspace roles", + "tags": [ + "v1" + ], + "summary": "Updates the workspace roles for user", + "operationId": "v1UsersWorkspaceRolesPut", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "workspaces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "userUid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/validate/name": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validates the workspace name", + "operationId": "v1WorkspacesValidateName", + "parameters": [ + { + "type": "string", + "name": "name", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/workspaces/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified workspace", + "operationId": "v1WorkspacesUidGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Workspace information", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace specifications", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "policies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + }, + "status": { + "description": "Workspace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace error", + "properties": { + "clusterUid": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified workspace", + "operationId": "v1WorkspacesUidDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/backup": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the workspace backup result", + "operationId": "v1WorkspaceOpsBackupGet", + "parameters": [ + { + "type": "string", + "name": "backupRequestUid", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Workspace backup", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace backup spec", + "properties": { + "config": { + "description": "Workspace backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "workspaceUid": { + "type": "string" + } + } + }, + "status": { + "description": "Workspace backup status", + "properties": { + "workspaceBackupStatuses": { + "type": "array", + "items": { + "description": "Workspace backup status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceBackupConfig": { + "description": "Workspace cluster backup config", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "clusterBackupRefs": { + "type": "array", + "items": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "config": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "requestTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update workspace backup settings", + "operationId": "v1WorkspaceOpsBackupUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create workspace backup settings", + "operationId": "v1WorkspaceOpsBackupCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete workspace backup", + "operationId": "v1WorkspaceOpsBackupDelete", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup delete config", + "properties": { + "clusterConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace backup cluster ref", + "properties": { + "backupName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "requestUid": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/backup/onDemand": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create On demand Workspace Backup", + "operationId": "v1WorkspaceOpsBackupOnDemandCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/clusterNamespaces": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified workspace namespaces", + "operationId": "v1WorkspacesUidClusterNamespacesUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Workspace cluster namespaces update entity", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/clusterRbacs": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create cluster rbac in workspace", + "operationId": "v1WorkspacesClusterRbacCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/clusterRbacs/{clusterRbacUid}": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified workspace cluster rbac", + "operationId": "v1WorkspacesUidClusterRbacUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified workspace cluster rbac", + "operationId": "v1WorkspacesUidClusterRbacDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "name": "clusterRbacUid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/meta": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified workspace meta", + "operationId": "v1WorkspacesUidMetaUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/restore": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the workspace restore result", + "operationId": "v1WorkspaceOpsRestoreGet", + "parameters": [ + { + "type": "string", + "name": "restoreRequestUid", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Workspace restore", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace restore spec", + "properties": { + "workspaceUid": { + "type": "string" + } + } + }, + "status": { + "description": "Workspace restore status", + "properties": { + "workspaceRestoreStatuses": { + "type": "array", + "items": { + "description": "Workspace restore status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "clusterRestoreRefs": { + "type": "array", + "items": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "restoreUid": { + "type": "string" + } + } + } + }, + "restoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/workspaces/{uid}/restore/onDemand": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create On demand Workspace Restore", + "operationId": "v1WorkspaceOpsRestoreOnDemandCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster restore config", + "required": [ + "backupRequestUid" + ], + "properties": { + "backupRequestUid": { + "type": "string" + }, + "restoreConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster restore config", + "required": [ + "backupName", + "sourceClusterUid" + ], + "properties": { + "backupName": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + }, + "sourceClusterUid": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + } + }, + "definitions": { + "URLEncodedBase64": { + "type": "string", + "format": "url-encoded-base64" + }, + "V1AwsAccountSts": { + "description": "AWS cloud account sts", + "type": "object", + "properties": { + "accountId": { + "description": "A 12-digit number, such as 123456789012, that uniquely identifies an AWS account", + "type": "string" + }, + "externalId": { + "description": "It can be passed to the AssumeRole API of the STS. It can be used in the condition element in a role's trust policy, allowing the role to be assumed only when a certain value is present in the external ID", + "type": "string" + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + } + } + }, + "V1AwsPropertiesValidateSpec": { + "description": "AWS properties validate spec", + "type": "object", + "properties": { + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + } + } + }, + "V1EksPropertiesValidateSpec": { + "description": "Eks properties validate spec", + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcId": { + "type": "string" + } + } + }, + "V1GcpPropertiesValidateSpec": { + "description": "Gcp properties validate spec", + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "cloudAccountUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "region": { + "type": "string" + } + } + }, + "V1PasswordsBlockList": { + "description": "List of blocklisted passwords", + "type": "object", + "properties": { + "spec": { + "description": "List of block listed passwords", + "type": "object", + "properties": { + "passwords": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "urlEncodedBase64": { + "type": "string", + "format": "url-encoded-base64" + }, + "v1.AzureAccountEntitySpec": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "v1.CloudWatchConfig": { + "description": "Cloud watch config entity", + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "description": "Name of the group", + "type": "string" + }, + "region": { + "description": "Name of the region", + "type": "string" + }, + "stream": { + "description": "Name of the stream", + "type": "string" + } + } + }, + "v1.DataSinkCloudWatchConfig": { + "description": "Data sink cloud watch config", + "type": "object", + "properties": { + "payload": { + "description": "List of data sink payload entities", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Data sink payload entity", + "type": "object", + "properties": { + "refUid": { + "description": "RefUid of the data sink payload", + "type": "string" + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": { + "type": "object" + } + } + }, + "spec": { + "description": "Cloud watch config entity", + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "description": "Name of the group", + "type": "string" + }, + "region": { + "description": "Name of the region", + "type": "string" + }, + "stream": { + "description": "Name of the stream", + "type": "string" + } + } + } + } + }, + "v1.DataSinkPayload": { + "description": "Data sink payload entity", + "type": "object", + "properties": { + "refUid": { + "description": "RefUid of the data sink payload", + "type": "string" + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "v1.DataSinkPayloads": { + "description": "List of data sink payload entities", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Data sink payload entity", + "type": "object", + "properties": { + "refUid": { + "description": "RefUid of the data sink payload", + "type": "string" + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": { + "type": "object" + } + } + }, + "v1.GcpAccountEntitySpec": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "v1AADProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1APIEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "v1APIServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "v1AWSVolumeTypes": { + "description": "AWS Volume Types", + "type": "object", + "properties": { + "volumeTypes": { + "type": "array", + "items": { + "description": "AWS Volume Type entity", + "type": "object", + "properties": { + "id": { + "description": "AWS volume type id", + "type": "string" + }, + "maxIops": { + "description": "Iops through put of volume type", + "type": "string" + }, + "maxThroughPut": { + "description": "Max through put of volume type", + "type": "string" + }, + "name": { + "description": "AWS Volume Type Name", + "type": "string" + } + } + } + } + } + }, + "v1AclMeta": { + "description": "Resource access control information (Read-only response data)", + "type": "object", + "properties": { + "ownerUid": { + "description": "User or service uid which created the resource", + "type": "string" + }, + "projectUid": { + "description": "Project's uid if the resource is under a project", + "type": "string" + }, + "tenantUid": { + "description": "Tenant's uid", + "type": "string" + } + } + }, + "v1ActiveTenantResources": { + "description": "Active resources of tenant", + "type": "object", + "properties": { + "activeResources": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "v1Address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1Alert": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "component": { + "type": "string" + } + } + }, + "v1AlertEntity": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1AlertNotificationStatus": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1Alerts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "component": { + "type": "string" + } + } + } + }, + "v1ApiEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "v1ApiKey": { + "description": "API key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "API key specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "key": { + "description": "Deprecated: API key field will be no longer available", + "type": "string" + }, + "user": { + "description": "API key user information", + "type": "object", + "properties": { + "firstName": { + "description": "First name of user", + "type": "string" + }, + "lastName": { + "description": "Last name of user", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + } + } + } + }, + "status": { + "description": "API key status", + "type": "object", + "properties": { + "isActive": { + "description": "API key active state", + "type": "boolean" + } + } + } + } + }, + "v1ApiKeyActiveState": { + "properties": { + "isActive": { + "description": "API key active state", + "type": "boolean" + } + } + }, + "v1ApiKeyCreateResponse": { + "description": "Response of create API key", + "type": "object", + "properties": { + "apiKey": { + "description": "Api key is used for authentication", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + } + }, + "v1ApiKeyEntity": { + "description": "API key request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "API key specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "userUid": { + "description": "User to whom the API key has to be created", + "type": "string" + } + } + } + } + }, + "v1ApiKeySpec": { + "description": "API key specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "key": { + "description": "Deprecated: API key field will be no longer available", + "type": "string" + }, + "user": { + "description": "API key user information", + "type": "object", + "properties": { + "firstName": { + "description": "First name of user", + "type": "string" + }, + "lastName": { + "description": "Last name of user", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + } + } + } + }, + "v1ApiKeySpecEntity": { + "description": "API key specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "userUid": { + "description": "User to whom the API key has to be created", + "type": "string" + } + } + }, + "v1ApiKeySpecUpdate": { + "description": "API key update request specification", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1ApiKeyStatus": { + "description": "API key status", + "type": "object", + "properties": { + "isActive": { + "description": "API key active state", + "type": "boolean" + } + } + }, + "v1ApiKeyUpdate": { + "description": "API key update request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "API key update request specification", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1ApiKeyUser": { + "description": "API key user information", + "type": "object", + "properties": { + "firstName": { + "description": "First name of user", + "type": "string" + }, + "lastName": { + "description": "Last name of user", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + } + }, + "v1ApiKeys": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of API keys", + "type": "array", + "uniqueItems": true, + "items": { + "description": "API key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "API key specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "key": { + "description": "Deprecated: API key field will be no longer available", + "type": "string" + }, + "user": { + "description": "API key user information", + "type": "object", + "properties": { + "firstName": { + "description": "First name of user", + "type": "string" + }, + "lastName": { + "description": "Last name of user", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + } + } + } + }, + "status": { + "description": "API key status", + "type": "object", + "properties": { + "isActive": { + "description": "API key active state", + "type": "boolean" + } + } + } + } + } + } + } + }, + "v1ApiProfiler": { + "type": "object", + "properties": { + "api": { + "type": "string" + }, + "endTime": { + "type": "string", + "format": "date-time" + }, + "ops": { + "type": "array", + "items": { + "type": "string" + } + }, + "requestUid": { + "type": "string" + }, + "startTime": { + "type": "string", + "format": "date-time" + }, + "timeTaken": { + "type": "integer", + "format": "int64" + } + } + }, + "v1AppDeployment": { + "description": "Application deployment response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application deployment spec", + "type": "object", + "properties": { + "config": { + "description": "Application deployment config response", + "type": "object", + "properties": { + "target": { + "description": "Application deployment target config response", + "type": "object", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "type": "object", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment cluster uid", + "type": "string" + } + } + }, + "envRef": { + "description": "Application deployment target environment reference", + "type": "object", + "properties": { + "name": { + "description": "Application deployment target resource name", + "type": "string" + }, + "type": { + "description": "Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]", + "type": "string" + }, + "uid": { + "description": "Application deployment target resource uid", + "type": "string" + } + } + } + } + } + } + }, + "profile": { + "description": "Application deployment profile", + "type": "object", + "properties": { + "metadata": { + "description": "Application deployment profile metadata", + "type": "object", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + }, + "template": { + "description": "Application profile template information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier reference", + "type": "object", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "Application deployment status", + "type": "object", + "properties": { + "appTiers": { + "description": "Application deployment tiers", + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "Application deployment state [ \"Pending\", \"Deploying\", \"Deployed\", \"Updating\" ]", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentClusterGroupConfigEntity": { + "description": "Application deployment cluster group config", + "type": "object", + "properties": { + "targetSpec": { + "description": "Application deployment cluster group target spec", + "type": "object", + "required": [ + "clusterName", + "clusterGroupUid" + ], + "properties": { + "clusterGroupUid": { + "description": "Application deployment cluster group uid", + "type": "string" + }, + "clusterLimits": { + "description": "Application deployment target cluster limits", + "properties": { + "cpu": { + "description": "CPU cores", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "clusterName": { + "description": "Application deployment virtual cluster name", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentClusterGroupEntity": { + "description": "Application deployment cluster group request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Application deployment cluster group spec", + "type": "object", + "properties": { + "config": { + "description": "Application deployment cluster group config", + "type": "object", + "properties": { + "targetSpec": { + "description": "Application deployment cluster group target spec", + "type": "object", + "required": [ + "clusterName", + "clusterGroupUid" + ], + "properties": { + "clusterGroupUid": { + "description": "Application deployment cluster group uid", + "type": "string" + }, + "clusterLimits": { + "description": "Application deployment target cluster limits", + "properties": { + "cpu": { + "description": "CPU cores", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "clusterName": { + "description": "Application deployment virtual cluster name", + "type": "string" + } + } + } + } + }, + "profile": { + "description": "Application deployment profile request payload", + "type": "object", + "required": [ + "appProfileUid" + ], + "properties": { + "appProfileUid": { + "description": "Application deployment profile uid", + "type": "string" + } + } + } + } + } + } + }, + "v1AppDeploymentClusterGroupSpec": { + "description": "Application deployment cluster group spec", + "type": "object", + "properties": { + "config": { + "description": "Application deployment cluster group config", + "type": "object", + "properties": { + "targetSpec": { + "description": "Application deployment cluster group target spec", + "type": "object", + "required": [ + "clusterName", + "clusterGroupUid" + ], + "properties": { + "clusterGroupUid": { + "description": "Application deployment cluster group uid", + "type": "string" + }, + "clusterLimits": { + "description": "Application deployment target cluster limits", + "properties": { + "cpu": { + "description": "CPU cores", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "clusterName": { + "description": "Application deployment virtual cluster name", + "type": "string" + } + } + } + } + }, + "profile": { + "description": "Application deployment profile request payload", + "type": "object", + "required": [ + "appProfileUid" + ], + "properties": { + "appProfileUid": { + "description": "Application deployment profile uid", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentClusterGroupTargetSpec": { + "description": "Application deployment cluster group target spec", + "type": "object", + "required": [ + "clusterName", + "clusterGroupUid" + ], + "properties": { + "clusterGroupUid": { + "description": "Application deployment cluster group uid", + "type": "string" + }, + "clusterLimits": { + "description": "Application deployment target cluster limits", + "properties": { + "cpu": { + "description": "CPU cores", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "clusterName": { + "description": "Application deployment virtual cluster name", + "type": "string" + } + } + }, + "v1AppDeploymentClusterHealth": { + "description": "Application deployment cluster health status", + "properties": { + "state": { + "type": "string" + } + } + }, + "v1AppDeploymentClusterRef": { + "description": "Application deployment cluster reference", + "type": "object", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment cluster uid", + "type": "string" + } + } + }, + "v1AppDeploymentClusterRefSummary": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment source cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment source cluster uid", + "type": "string" + } + } + }, + "v1AppDeploymentClusterStatus": { + "description": "Application deployment cluster status", + "properties": { + "health": { + "description": "Application deployment cluster health status", + "properties": { + "state": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1AppDeploymentConfig": { + "description": "Application deployment config response", + "type": "object", + "properties": { + "target": { + "description": "Application deployment target config response", + "type": "object", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "type": "object", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment cluster uid", + "type": "string" + } + } + }, + "envRef": { + "description": "Application deployment target environment reference", + "type": "object", + "properties": { + "name": { + "description": "Application deployment target resource name", + "type": "string" + }, + "type": { + "description": "Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]", + "type": "string" + }, + "uid": { + "description": "Application deployment target resource uid", + "type": "string" + } + } + } + } + } + } + }, + "v1AppDeploymentConfigSummary": { + "description": "Application deployment config summary", + "properties": { + "target": { + "description": "Application deployment target config summary", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment source cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment source cluster uid", + "type": "string" + } + } + } + } + } + } + }, + "v1AppDeploymentFilterSpec": { + "description": "Application deployment filter spec", + "properties": { + "appDeploymentName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "clusterUids": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + } + } + }, + "v1AppDeploymentNotifications": { + "description": "Application deployment notifications", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1AppDeploymentProfile": { + "description": "Application deployment profile", + "type": "object", + "properties": { + "metadata": { + "description": "Application deployment profile metadata", + "type": "object", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + }, + "template": { + "description": "Application profile template information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier reference", + "type": "object", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppDeploymentProfileEntity": { + "description": "Application deployment profile request payload", + "type": "object", + "required": [ + "appProfileUid" + ], + "properties": { + "appProfileUid": { + "description": "Application deployment profile uid", + "type": "string" + } + } + }, + "v1AppDeploymentProfileMeta": { + "description": "Application deployment profile metadata", + "type": "object", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + }, + "v1AppDeploymentProfileMetadataSummary": { + "description": "Application deployment profile metadata summary", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AppDeploymentProfileSpec": { + "description": "Application deployment profile spec", + "type": "object", + "properties": { + "metadata": { + "description": "Application deployment profile metadata", + "type": "object", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + }, + "template": { + "description": "Application profile template specs", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application tier specs", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppDeploymentProfileSummary": { + "description": "Application deployment profile summary", + "properties": { + "metadata": { + "description": "Application deployment profile metadata summary", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "template": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppDeploymentProfileVersion": { + "description": "Application deployment profile version", + "type": "object", + "properties": { + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + }, + "v1AppDeploymentProfileVersions": { + "description": "Application deployment profile versions", + "type": "object", + "properties": { + "availableVersions": { + "description": "Application deployment profile available versions", + "type": "array", + "items": { + "description": "Application deployment profile version", + "type": "object", + "properties": { + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + } + }, + "latestVersions": { + "description": "Application deployment profile latest versions", + "type": "array", + "items": { + "description": "Application deployment profile version", + "type": "object", + "properties": { + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Application deployment profile metadata", + "type": "object", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentSortFields": { + "type": "string", + "enum": [ + "appDeploymentName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1AppDeploymentSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "appDeploymentName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1AppDeploymentSpec": { + "description": "Application deployment spec", + "type": "object", + "properties": { + "config": { + "description": "Application deployment config response", + "type": "object", + "properties": { + "target": { + "description": "Application deployment target config response", + "type": "object", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "type": "object", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment cluster uid", + "type": "string" + } + } + }, + "envRef": { + "description": "Application deployment target environment reference", + "type": "object", + "properties": { + "name": { + "description": "Application deployment target resource name", + "type": "string" + }, + "type": { + "description": "Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]", + "type": "string" + }, + "uid": { + "description": "Application deployment target resource uid", + "type": "string" + } + } + } + } + } + } + }, + "profile": { + "description": "Application deployment profile", + "type": "object", + "properties": { + "metadata": { + "description": "Application deployment profile metadata", + "type": "object", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + } + }, + "template": { + "description": "Application profile template information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier reference", + "type": "object", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1AppDeploymentStatus": { + "description": "Application deployment status", + "type": "object", + "properties": { + "appTiers": { + "description": "Application deployment tiers", + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "Application deployment state [ \"Pending\", \"Deploying\", \"Deployed\", \"Updating\" ]", + "type": "string" + } + } + }, + "v1AppDeploymentStatusSummary": { + "description": "Application deployment status summary", + "type": "object", + "properties": { + "cluster": { + "description": "Application deployment cluster status", + "properties": { + "health": { + "description": "Application deployment cluster health status", + "properties": { + "state": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "notifications": { + "description": "Application deployment notifications", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1AppDeploymentSummary": { + "description": "Application deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application deployment spec summary", + "type": "object", + "properties": { + "config": { + "description": "Application deployment config summary", + "properties": { + "target": { + "description": "Application deployment target config summary", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment source cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment source cluster uid", + "type": "string" + } + } + } + } + } + } + }, + "profile": { + "description": "Application deployment profile summary", + "properties": { + "metadata": { + "description": "Application deployment profile metadata summary", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "template": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "Application deployment status summary", + "type": "object", + "properties": { + "cluster": { + "description": "Application deployment cluster status", + "properties": { + "health": { + "description": "Application deployment cluster health status", + "properties": { + "state": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "notifications": { + "description": "Application deployment notifications", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1AppDeploymentTargetClusterLimits": { + "description": "Application deployment target cluster limits", + "properties": { + "cpu": { + "description": "CPU cores", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "v1AppDeploymentTargetConfig": { + "description": "Application deployment target config response", + "type": "object", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "type": "object", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment cluster uid", + "type": "string" + } + } + }, + "envRef": { + "description": "Application deployment target environment reference", + "type": "object", + "properties": { + "name": { + "description": "Application deployment target resource name", + "type": "string" + }, + "type": { + "description": "Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]", + "type": "string" + }, + "uid": { + "description": "Application deployment target resource uid", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentTargetConfigSummary": { + "description": "Application deployment target config summary", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment source cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment source cluster uid", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentTargetEnvironmentRef": { + "description": "Application deployment target environment reference", + "type": "object", + "properties": { + "name": { + "description": "Application deployment target resource name", + "type": "string" + }, + "type": { + "description": "Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]", + "type": "string" + }, + "uid": { + "description": "Application deployment target resource uid", + "type": "string" + } + } + }, + "v1AppDeploymentVirtualClusterConfigEntity": { + "description": "Application deployment virtual cluster config", + "type": "object", + "properties": { + "targetSpec": { + "description": "Application deployment virtual cluster target spec", + "type": "object", + "required": [ + "clusterUid" + ], + "properties": { + "clusterUid": { + "description": "Application deployment virtual cluster uid", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentVirtualClusterEntity": { + "description": "Application deployment virtual cluster request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Application deployment virtual cluster spec", + "type": "object", + "properties": { + "config": { + "description": "Application deployment virtual cluster config", + "type": "object", + "properties": { + "targetSpec": { + "description": "Application deployment virtual cluster target spec", + "type": "object", + "required": [ + "clusterUid" + ], + "properties": { + "clusterUid": { + "description": "Application deployment virtual cluster uid", + "type": "string" + } + } + } + } + }, + "profile": { + "description": "Application deployment profile request payload", + "type": "object", + "required": [ + "appProfileUid" + ], + "properties": { + "appProfileUid": { + "description": "Application deployment profile uid", + "type": "string" + } + } + } + } + } + } + }, + "v1AppDeploymentVirtualClusterSpec": { + "description": "Application deployment virtual cluster spec", + "type": "object", + "properties": { + "config": { + "description": "Application deployment virtual cluster config", + "type": "object", + "properties": { + "targetSpec": { + "description": "Application deployment virtual cluster target spec", + "type": "object", + "required": [ + "clusterUid" + ], + "properties": { + "clusterUid": { + "description": "Application deployment virtual cluster uid", + "type": "string" + } + } + } + } + }, + "profile": { + "description": "Application deployment profile request payload", + "type": "object", + "required": [ + "appProfileUid" + ], + "properties": { + "appProfileUid": { + "description": "Application deployment profile uid", + "type": "string" + } + } + } + } + }, + "v1AppDeploymentVirtualClusterTargetSpec": { + "description": "Application deployment virtual cluster target spec", + "type": "object", + "required": [ + "clusterUid" + ], + "properties": { + "clusterUid": { + "description": "Application deployment virtual cluster uid", + "type": "string" + } + } + }, + "v1AppDeploymentsFilterSpec": { + "description": "Application deployment filter summary spec", + "properties": { + "filter": { + "description": "Application deployment filter spec", + "properties": { + "appDeploymentName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "clusterUids": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "appDeploymentName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1AppDeploymentsSummary": { + "type": "object", + "properties": { + "appDeployments": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application deployment spec summary", + "type": "object", + "properties": { + "config": { + "description": "Application deployment config summary", + "properties": { + "target": { + "description": "Application deployment target config summary", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment source cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment source cluster uid", + "type": "string" + } + } + } + } + } + } + }, + "profile": { + "description": "Application deployment profile summary", + "properties": { + "metadata": { + "description": "Application deployment profile metadata summary", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "template": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "Application deployment status summary", + "type": "object", + "properties": { + "cluster": { + "description": "Application deployment cluster status", + "properties": { + "health": { + "description": "Application deployment cluster health status", + "properties": { + "state": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "notifications": { + "description": "Application deployment notifications", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AppFeatureFreemium": { + "description": "Freemium information", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "totalUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1AppFeatures": { + "description": "System app features", + "properties": { + "developerCredit": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + }, + "freeCloudCredit": { + "type": "boolean", + "x-omitempty": false + }, + "freemium": { + "description": "Freemium information", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "totalUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1AppProfile": { + "description": "Application profile response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "parentUid": { + "description": "Application profile parent profile uid", + "type": "string" + }, + "template": { + "description": "Application profile template information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier reference", + "type": "object", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + }, + "version": { + "description": "Application profile version", + "type": "string" + }, + "versions": { + "description": "Application profile versions list", + "type": "array", + "items": { + "description": "Application profile version", + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Application profile status", + "type": "object", + "properties": { + "inUseApps": { + "description": "Application profile apps array", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppProfileCloneEntity": { + "description": "Application profile clone request payload", + "type": "object", + "properties": { + "metadata": { + "description": "Application profile clone metadata", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Application profile name", + "type": "string" + }, + "target": { + "description": "Application profile clone target", + "type": "object", + "properties": { + "projectUid": { + "description": "Application profile clone target project uid", + "type": "string" + } + } + }, + "version": { + "description": "Application profile version", + "type": "string" + } + } + } + } + }, + "v1AppProfileCloneMetaInputEntity": { + "description": "Application profile clone metadata", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Application profile name", + "type": "string" + }, + "target": { + "description": "Application profile clone target", + "type": "object", + "properties": { + "projectUid": { + "description": "Application profile clone target project uid", + "type": "string" + } + } + }, + "version": { + "description": "Application profile version", + "type": "string" + } + } + }, + "v1AppProfileCloneTarget": { + "description": "Application profile clone target", + "type": "object", + "properties": { + "projectUid": { + "description": "Application profile clone target project uid", + "type": "string" + } + } + }, + "v1AppProfileEntity": { + "description": "Application profile request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Application profile spec", + "type": "object", + "properties": { + "template": { + "description": "Application profile template spec", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier manifests", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Application tier registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + } + }, + "version": { + "description": "Application profile version", + "type": "string" + } + } + } + } + }, + "v1AppProfileFilterSpec": { + "description": "Application profile filter spec", + "properties": { + "profileName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "version": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "v1AppProfileMetaEntity": { + "description": "Application profile metadata request payload", + "type": "object", + "required": [ + "metadata" + ], + "properties": { + "metadata": { + "description": "Application profile metadata update request payload", + "type": "object", + "properties": { + "annotations": { + "description": "Application profile annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Application profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "version": { + "description": "Application profile version", + "type": "string" + } + } + }, + "v1AppProfileMetaUpdateEntity": { + "description": "Application profile metadata update request payload", + "type": "object", + "properties": { + "annotations": { + "description": "Application profile annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Application profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1AppProfileMetadata": { + "description": "Application profile metadata summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "properties": { + "version": { + "type": "string" + } + } + } + } + }, + "v1AppProfileSortFields": { + "type": "string", + "enum": [ + "profileName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1AppProfileSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "profileName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1AppProfileSummary": { + "description": "Application profile summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application profile spec summary", + "type": "object", + "properties": { + "parentUid": { + "type": "string" + }, + "template": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Application profile's list of all the versions", + "type": "array", + "items": { + "description": "Application profile version", + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppProfileTemplate": { + "description": "Application profile template information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier reference", + "type": "object", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + }, + "v1AppProfileTemplateEntity": { + "description": "Application profile template spec", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application tier request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier manifests", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Application tier registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + } + }, + "v1AppProfileTemplateSpec": { + "description": "Application profile template specs", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application tier specs", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + } + }, + "registryRefs": { + "description": "Application profile registries reference", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + }, + "v1AppProfileTemplateSummary": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1AppProfileTiers": { + "description": "Application profile tiers information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application profile tiers information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application tier specs", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1AppProfileTiersSpec": { + "description": "Application profile tiers information", + "type": "object", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application tier specs", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppProfileVersion": { + "description": "Application profile version", + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AppProfilesFilterSpec": { + "description": "Application profile filter summary spec", + "properties": { + "filter": { + "description": "Application profile filter spec", + "properties": { + "profileName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "version": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "profileName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1AppProfilesMetadata": { + "type": "object", + "properties": { + "appProfiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application profile metadata summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "properties": { + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1AppProfilesSummary": { + "type": "object", + "properties": { + "appProfiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application profile summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application profile spec summary", + "type": "object", + "properties": { + "parentUid": { + "type": "string" + }, + "template": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Application profile's list of all the versions", + "type": "array", + "items": { + "description": "Application profile version", + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AppTier": { + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Application tier specs", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + } + } + }, + "v1AppTierEntity": { + "description": "Application tier request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier manifests", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Application tier registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + }, + "v1AppTierManifests": { + "description": "Application tier manifests data", + "properties": { + "manifests": { + "description": "Application tier manifests array", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "properties": { + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1AppTierPatchEntity": { + "description": "Application tier patch request payload", + "properties": { + "appTier": { + "description": "Application tier request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier manifests", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Application tier registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + }, + "replaceWithAppTier": { + "description": "Application tier UID to be replaced with new tier", + "type": "string" + } + } + }, + "v1AppTierProperty": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + }, + "v1AppTierPropertyEntity": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + }, + "v1AppTierRef": { + "description": "Application tier reference", + "type": "object", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + }, + "v1AppTierResolvedValues": { + "description": "Application tier resolved macro values", + "properties": { + "resolved": { + "description": "Application tier resolved macro values map", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1AppTierSourceSummary": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1AppTierSpec": { + "description": "Application tier specs", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + }, + "v1AppTierSummary": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AppTierType": { + "type": "string", + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ] + }, + "v1AppTierUpdateEntity": { + "description": "Application tier update request payload", + "type": "object", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "type": "integer", + "format": "int32" + }, + "manifests": { + "description": "Application tier manifests", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "type": "array", + "items": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + } + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + } + }, + "v1AppVersion": { + "description": "spectro application management app version information", + "properties": { + "intermediateVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + }, + "latestVerson": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + } + }, + "v1ArchType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + }, + "v1AsyncOperationIdEntity": { + "description": "Async operation id", + "type": "object", + "properties": { + "operationId": { + "description": "OperationId for a particular sync operation id", + "type": "string" + } + } + }, + "v1AsyncResult": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "error": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + } + } + }, + "v1AsyncStatus": { + "type": "object", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "result": { + "type": "object", + "properties": { + "data": { + "type": "object" + }, + "error": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + } + } + }, + "stage": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1Audit": { + "description": "Audit response payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Audit specifications", + "properties": { + "actionMsg": { + "description": "Audit action message", + "type": "string" + }, + "actionType": { + "type": "string", + "enum": [ + "create", + "update", + "delete", + "publish", + "deploy" + ] + }, + "actor": { + "description": "Audit actor object", + "properties": { + "actorType": { + "type": "string", + "enum": [ + "user", + "system", + "service" + ] + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "serviceName": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "org": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "contentMsg": { + "description": "Audit content message", + "type": "string" + }, + "resource": { + "description": "Audit resource reference object", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "description": "Audit resource type", + "type": "string" + }, + "label": { + "description": "Audit resource label", + "type": "string" + }, + "name": { + "description": "Audit resource name", + "type": "string" + }, + "uid": { + "description": "Audit resource uid", + "type": "string" + } + } + }, + "userMsg": { + "description": "Audit user message", + "type": "string" + } + } + } + } + }, + "v1AuditActor": { + "description": "Audit actor object", + "properties": { + "actorType": { + "type": "string", + "enum": [ + "user", + "system", + "service" + ] + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "serviceName": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "org": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1AuditMsgUpdate": { + "description": "Audit user message update request payload", + "type": "object", + "properties": { + "userMsg": { + "description": "User message", + "type": "string", + "maxLength": 255, + "minLength": 3 + } + } + }, + "v1AuditResourceReference": { + "description": "Audit resource reference object", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "description": "Audit resource type", + "type": "string" + }, + "label": { + "description": "Audit resource label", + "type": "string" + }, + "name": { + "description": "Audit resource name", + "type": "string" + }, + "uid": { + "description": "Audit resource uid", + "type": "string" + } + } + }, + "v1AuditSpec": { + "description": "Audit specifications", + "properties": { + "actionMsg": { + "description": "Audit action message", + "type": "string" + }, + "actionType": { + "type": "string", + "enum": [ + "create", + "update", + "delete", + "publish", + "deploy" + ] + }, + "actor": { + "description": "Audit actor object", + "properties": { + "actorType": { + "type": "string", + "enum": [ + "user", + "system", + "service" + ] + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "serviceName": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "org": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "contentMsg": { + "description": "Audit content message", + "type": "string" + }, + "resource": { + "description": "Audit resource reference object", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "description": "Audit resource type", + "type": "string" + }, + "label": { + "description": "Audit resource label", + "type": "string" + }, + "name": { + "description": "Audit resource name", + "type": "string" + }, + "uid": { + "description": "Audit resource uid", + "type": "string" + } + } + }, + "userMsg": { + "description": "Audit user message", + "type": "string" + } + } + }, + "v1AuditSysMsg": { + "description": "Audit system message", + "type": "object", + "properties": { + "actionMsg": { + "description": "Audit resource action message", + "type": "string" + }, + "contentMsg": { + "description": "Audit resource content message", + "type": "string" + } + } + }, + "v1Audits": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of audit message", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Audit response payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Audit specifications", + "properties": { + "actionMsg": { + "description": "Audit action message", + "type": "string" + }, + "actionType": { + "type": "string", + "enum": [ + "create", + "update", + "delete", + "publish", + "deploy" + ] + }, + "actor": { + "description": "Audit actor object", + "properties": { + "actorType": { + "type": "string", + "enum": [ + "user", + "system", + "service" + ] + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "serviceName": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "org": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "contentMsg": { + "description": "Audit content message", + "type": "string" + }, + "resource": { + "description": "Audit resource reference object", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "description": "Audit resource type", + "type": "string" + }, + "label": { + "description": "Audit resource label", + "type": "string" + }, + "name": { + "description": "Audit resource name", + "type": "string" + }, + "uid": { + "description": "Audit resource uid", + "type": "string" + } + } + }, + "userMsg": { + "description": "Audit user message", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AuthAllyTokenRequest": { + "type": "object", + "properties": { + "edgeAuthToken": { + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "v1AuthCertsGet": { + "description": "Auth certs get", + "properties": { + "apiDomain": { + "type": "string", + "x-omitempty": false + }, + "caCert": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "rootDomain": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1AuthEdgeJetKeyRequest": { + "type": "object", + "required": [ + "edgeAuthToken", + "edgeHostUid" + ], + "properties": { + "edgeAuthToken": { + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "v1AuthJetKeyRequest": { + "type": "object", + "required": [ + "allyAuthToken", + "hostClusterUid" + ], + "properties": { + "allyAuthToken": { + "type": "string" + }, + "hostClusterUid": { + "type": "string" + } + } + }, + "v1AuthLogin": { + "description": "Describes the credential details required for authentication", + "type": "object", + "properties": { + "emailId": { + "description": "Describes the email id required for the user to authenticate", + "type": "string" + }, + "org": { + "description": "Describes the user's organization name to login", + "type": "string" + }, + "password": { + "description": "Describes the password required for the user to authenticate", + "type": "string", + "format": "password" + } + } + }, + "v1AuthLoginEntity": { + "description": "Auth login entity", + "type": "object", + "properties": { + "authType": { + "type": "string", + "enum": [ + "password", + "sso" + ] + }, + "orgName": { + "type": "string" + }, + "redirectUrl": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1AuthLogins": { + "description": "Deprecated. Applicable auth logins with multiple orgs", + "type": "object", + "properties": { + "appEnv": { + "type": "string" + }, + "authType": { + "description": "Deprecated.", + "type": "string", + "enum": [ + "password", + "sso" + ] + }, + "orgName": { + "description": "Deprecated.", + "type": "string" + }, + "orgs": { + "type": "array", + "items": { + "description": "Auth login entity", + "type": "object", + "properties": { + "authType": { + "type": "string", + "enum": [ + "password", + "sso" + ] + }, + "orgName": { + "type": "string" + }, + "redirectUrl": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "redirectUrl": { + "description": "Deprecated.", + "type": "string", + "x-omitempty": false + } + } + }, + "v1AuthMfaLoginFinishRequest": { + "type": "object", + "properties": { + "_type": { + "type": "string" + }, + "authenticatorAttachment": { + "type": "string" + }, + "clientExtensionResults": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "deviceName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "rawId": { + "type": "string", + "format": "url-encoded-base64" + }, + "response": { + "type": "object", + "properties": { + "authenticatorData": { + "type": "string", + "format": "url-encoded-base64" + }, + "clientDataJSON": { + "type": "string", + "format": "url-encoded-base64" + }, + "signature": { + "type": "string", + "format": "url-encoded-base64" + }, + "userHandle": { + "type": "string", + "format": "url-encoded-base64" + } + } + } + } + }, + "v1AuthServiceTokenRequest": { + "type": "object", + "properties": { + "authKey": { + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "hostClusterUid": { + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "jetUid": { + "type": "string" + }, + "overlordUid": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1AuthServiceTokenResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "v1AuthShellyLoginRequest": { + "type": "object", + "properties": { + "secret": { + "type": "string" + } + } + }, + "v1AuthToken": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "v1AuthTokenRevoke": { + "properties": { + "tokens": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1AuthTokenSettings": { + "description": "System auth token settings", + "properties": { + "expiryTimeMinutes": { + "description": "Auth token expiry time in minutes", + "type": "integer", + "format": "int32", + "maximum": 1440, + "minimum": 15, + "x-omitempty": false + } + } + }, + "v1AwsAMI": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1AwsAccount": { + "description": "Aws cloud account information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1AwsAccounts": { + "description": "List of AWS accounts", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Aws cloud account information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AwsAmiReference": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "v1AwsAvailabilityZone": { + "description": "Distinct locations within an AWS Region that are engineered to be isolated from failures in other Zones", + "type": "object", + "properties": { + "name": { + "description": "AWS availability zone name", + "type": "string" + }, + "state": { + "description": "AWS availability zone state", + "type": "string" + }, + "zoneId": { + "description": "AWS availability zone id", + "type": "string" + } + } + }, + "v1AwsAvailabilityZones": { + "type": "object", + "required": [ + "zones" + ], + "properties": { + "zones": { + "description": "List of AWS Zones", + "type": "array", + "items": { + "description": "Distinct locations within an AWS Region that are engineered to be isolated from failures in other Zones", + "type": "object", + "properties": { + "name": { + "description": "AWS availability zone name", + "type": "string" + }, + "state": { + "description": "AWS availability zone state", + "type": "string" + }, + "zoneId": { + "description": "AWS availability zone id", + "type": "string" + } + } + } + } + } + }, + "v1AwsCloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "v1AwsCloudAccountCredentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "v1AwsCloudClusterConfigEntity": { + "description": "AWS cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + } + } + }, + "v1AwsCloudConfig": { + "description": "AwsCloudConfig is the Schema for the awscloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "AwsCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "status": { + "description": "AwsCloudConfigStatus defines the observed state of AwsCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "images": { + "description": "Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig", + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + } + } + }, + "v1AwsCloudConfigSpec": { + "description": "AwsCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "v1AwsCloudConfigStatus": { + "description": "AwsCloudConfigStatus defines the observed state of AwsCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "images": { + "description": "Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig", + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + }, + "v1AwsCloudCostSpec": { + "description": "Aws cloud account usage cost payload spec", + "type": "object", + "required": [ + "credentials" + ], + "properties": { + "accountId": { + "description": "AccountId of AWS cloud cost", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "filter": { + "description": "Aws cloud account usage cost payload filter. startTime and endTime should be within 12 months range from now.", + "type": "object", + "required": [ + "startTime" + ], + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "iamUserId": { + "description": "IAM UserId of AWS account", + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1AwsCloudCostSpecFilter": { + "description": "Aws cloud account usage cost payload filter. startTime and endTime should be within 12 months range from now.", + "type": "object", + "required": [ + "startTime" + ], + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "iamUserId": { + "description": "IAM UserId of AWS account", + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1AwsCloudCostSummary": { + "description": "AWS cloud account usage cost summary response data", + "type": "object", + "properties": { + "cost": { + "description": "AWS cloud account usage cost summary of monthlyCosts and totalCost", + "type": "object", + "properties": { + "monthlyCosts": { + "description": "Monthly cost of AWS cost", + "type": "array", + "items": { + "type": "object", + "properties": { + "amount": { + "description": "Amount for aws cloud cost", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "description": "Time duration for aws cloud cost", + "type": "integer" + } + } + } + }, + "total": { + "description": "Total cost of AWS cost", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1AwsCloudCostSummaryCloudCost": { + "description": "AWS cloud account usage cost summary of monthlyCosts and totalCost", + "type": "object", + "properties": { + "monthlyCosts": { + "description": "Monthly cost of AWS cost", + "type": "array", + "items": { + "type": "object", + "properties": { + "amount": { + "description": "Amount for aws cloud cost", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "description": "Time duration for aws cloud cost", + "type": "integer" + } + } + } + }, + "total": { + "description": "Total cost of AWS cost", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1AwsCloudCostSummaryMonthlyCost": { + "type": "object", + "properties": { + "amount": { + "description": "Amount for aws cloud cost", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "description": "Time duration for aws cloud cost", + "type": "integer" + } + } + }, + "v1AwsClusterConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "v1AwsCreditAccount": { + "type": "object", + "properties": { + "creditLimitInDollars": { + "type": "number", + "format": "float64" + }, + "loginCredentials": { + "type": "object", + "properties": { + "iamUser": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "userCloudAccount": { + "properties": { + "accountId": { + "type": "string" + }, + "cloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1AwsCreditAccountEntity": { + "type": "object", + "properties": { + "creditLimitInDollars": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "creditUsedInDollars": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "loginCredentials": { + "type": "object", + "properties": { + "iamUser": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "userCloudAccount": { + "properties": { + "accountId": { + "type": "string" + }, + "cloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1AwsFindImageRequest": { + "description": "AWS image name and credentials", + "type": "object", + "properties": { + "amiName": { + "description": "AWS image ami name", + "type": "string" + }, + "awsAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + } + } + }, + "v1AwsIamPolicy": { + "description": "Aws policy", + "type": "object", + "properties": { + "arn": { + "type": "string" + }, + "policyId": { + "type": "string" + }, + "policyName": { + "type": "string" + } + } + }, + "v1AwsImage": { + "description": "AWS image name and ami", + "type": "object", + "properties": { + "id": { + "description": "AWS image id", + "type": "string" + }, + "name": { + "description": "AWS image name", + "type": "string" + }, + "owner": { + "description": "AWS image owner id", + "type": "string" + } + } + }, + "v1AwsInstanceTypes": { + "description": "List of AWS instance types", + "type": "object", + "properties": { + "instanceTypes": { + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + } + } + }, + "v1AwsKeyPairs": { + "description": "List of AWS keypairs", + "type": "object", + "properties": { + "keyNames": { + "description": "Array of Aws Keypair names", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1AwsKmsKey": { + "description": "AWS KMS Key - gives you centralized control over the cryptographic keys used to protect your data.", + "type": "object", + "required": [ + "keyId", + "keyArn" + ], + "properties": { + "keyAlias": { + "description": "AWS KMS alias", + "type": "string" + }, + "keyArn": { + "description": "AWS KMS arn", + "type": "string" + }, + "keyId": { + "description": "AWS KMS keyid", + "type": "string" + } + } + }, + "v1AwsKmsKeyEntity": { + "description": "List of AWS Keys", + "type": "object", + "properties": { + "awsAccountId": { + "description": "The twelve-digit account ID of the Amazon Web Services account that owns the KMS key", + "type": "string" + }, + "enabled": { + "description": "Specifies whether the KMS key is enabled.", + "type": "boolean" + }, + "keyId": { + "description": "The globally unique identifier for the KMS key", + "type": "string" + } + } + }, + "v1AwsKmsKeys": { + "description": "List of AWS Keys", + "type": "object", + "required": [ + "kmsKeys" + ], + "properties": { + "kmsKeys": { + "type": "array", + "items": { + "description": "AWS KMS Key - gives you centralized control over the cryptographic keys used to protect your data.", + "type": "object", + "required": [ + "keyId", + "keyArn" + ], + "properties": { + "keyAlias": { + "description": "AWS KMS alias", + "type": "string" + }, + "keyArn": { + "description": "AWS KMS arn", + "type": "string" + }, + "keyId": { + "description": "AWS KMS keyid", + "type": "string" + } + } + } + } + } + }, + "v1AwsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "v1AwsLoginCredentials": { + "type": "object", + "properties": { + "iamUser": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "v1AwsMachine": { + "description": "AWS cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "AWS cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1AwsMachinePoolCloudConfigEntity": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "v1AwsMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1AwsMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1AwsMachineSpec": { + "description": "AWS cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + } + } + }, + "v1AwsMachines": { + "description": "AWS machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWS cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "AWS cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AwsNic": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1AwsPartition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "v1AwsPolicies": { + "type": "object", + "required": [ + "policies" + ], + "properties": { + "policies": { + "type": "array", + "items": { + "description": "Aws policy", + "type": "object", + "properties": { + "arn": { + "type": "string" + }, + "policyId": { + "type": "string" + }, + "policyName": { + "type": "string" + } + } + } + } + } + }, + "v1AwsPolicyArnsSpec": { + "description": "Aws policy ARNs spec", + "type": "object", + "required": [ + "policyArns", + "account" + ], + "properties": { + "account": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "policyArns": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1AwsRegion": { + "description": "AWS region which represents separate geographic area.", + "type": "object", + "properties": { + "endpoint": { + "description": "AWS offer a regional endpoint that can used to make requests", + "type": "string" + }, + "name": { + "description": "Name of the AWS region", + "type": "string" + }, + "optInStatus": { + "description": "Enable your account to operate in the particular regions", + "type": "string" + } + } + }, + "v1AwsRegions": { + "type": "object", + "required": [ + "regions" + ], + "properties": { + "regions": { + "description": "List of AWS regions", + "type": "array", + "items": { + "description": "AWS region which represents separate geographic area.", + "type": "object", + "properties": { + "endpoint": { + "description": "AWS offer a regional endpoint that can used to make requests", + "type": "string" + }, + "name": { + "description": "Name of the AWS region", + "type": "string" + }, + "optInStatus": { + "description": "Enable your account to operate in the particular regions", + "type": "string" + } + } + } + } + } + }, + "v1AwsResourceFilter": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1AwsResourceReference": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "v1AwsRootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + }, + "v1AwsS3BucketCredentials": { + "description": "AWS S3 Bucket credentials", + "type": "object", + "required": [ + "credentials", + "bucket", + "region" + ], + "properties": { + "bucket": { + "description": "Name of AWS S3 bucket", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "folder": { + "description": "Name of the folder in the specified AWS S3 bucket.", + "type": "string" + }, + "region": { + "description": "Name of the available AWS region.", + "type": "string" + } + } + }, + "v1AwsSecurityGroups": { + "type": "object", + "required": [ + "groups" + ], + "properties": { + "groups": { + "type": "array", + "items": { + "description": "Aws security group", + "type": "object", + "properties": { + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "ownerId": { + "type": "string" + } + } + } + } + } + }, + "v1AwsSecuritygroup": { + "description": "Aws security group", + "type": "object", + "properties": { + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "ownerId": { + "type": "string" + } + } + }, + "v1AwsStorageTypes": { + "type": "object", + "properties": { + "storageTypes": { + "description": "List of AWS storage types", + "type": "array", + "items": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1AwsStsCredentials": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + }, + "v1AwsSubnet": { + "description": "A subnet is a range of IP addresses in a AWS VPC", + "properties": { + "az": { + "description": "Every subnet can only be associated with only one Availability Zone", + "type": "string" + }, + "isPrivate": { + "description": "Is this subnet private", + "type": "boolean" + }, + "mapPublicIpOnLaunch": { + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address.", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Name of the subnet", + "type": "string" + }, + "subnetId": { + "description": "Id of the subnet", + "type": "string" + } + } + }, + "v1AwsSubnetEntity": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, + "v1AwsUserCloudAccount": { + "properties": { + "accountId": { + "type": "string" + }, + "cloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + } + } + }, + "v1AwsVolumeSize": { + "description": "AWS Volume Size entity", + "type": "object", + "properties": { + "sizeGB": { + "description": "AWS volume size", + "type": "integer" + } + } + }, + "v1AwsVolumeType": { + "description": "AWS Volume Type entity", + "type": "object", + "properties": { + "id": { + "description": "AWS volume type id", + "type": "string" + }, + "maxIops": { + "description": "Iops through put of volume type", + "type": "string" + }, + "maxThroughPut": { + "description": "Max through put of volume type", + "type": "string" + }, + "name": { + "description": "AWS Volume Type Name", + "type": "string" + } + } + }, + "v1AwsVpc": { + "description": "A virtual network dedicated to a AWS account", + "type": "object", + "required": [ + "vpcId" + ], + "properties": { + "cidrBlock": { + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated to a AWS VPC", + "type": "array", + "items": { + "description": "A subnet is a range of IP addresses in a AWS VPC", + "properties": { + "az": { + "description": "Every subnet can only be associated with only one Availability Zone", + "type": "string" + }, + "isPrivate": { + "description": "Is this subnet private", + "type": "boolean" + }, + "mapPublicIpOnLaunch": { + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address.", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Name of the subnet", + "type": "string" + }, + "subnetId": { + "description": "Id of the subnet", + "type": "string" + } + } + } + }, + "vpcId": { + "description": "Id of the virtual network", + "type": "string" + } + } + }, + "v1AwsVpcs": { + "description": "List of AWS VPCs", + "type": "object", + "required": [ + "vpcs" + ], + "properties": { + "vpcs": { + "type": "array", + "items": { + "description": "A virtual network dedicated to a AWS account", + "type": "object", + "required": [ + "vpcId" + ], + "properties": { + "cidrBlock": { + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated to a AWS VPC", + "type": "array", + "items": { + "description": "A subnet is a range of IP addresses in a AWS VPC", + "properties": { + "az": { + "description": "Every subnet can only be associated with only one Availability Zone", + "type": "string" + }, + "isPrivate": { + "description": "Is this subnet private", + "type": "boolean" + }, + "mapPublicIpOnLaunch": { + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address.", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Name of the subnet", + "type": "string" + }, + "subnetId": { + "description": "Id of the subnet", + "type": "string" + } + } + } + }, + "vpcId": { + "description": "Id of the virtual network", + "type": "string" + } + } + } + } + } + }, + "v1AzValidateEntity": { + "description": "Az validate entity", + "type": "object", + "properties": { + "azs": { + "description": "Gcp Azs", + "type": "array", + "items": { + "type": "string" + } + }, + "project": { + "description": "Gcp project", + "type": "string" + }, + "region": { + "description": "Gcp region", + "type": "string" + }, + "uid": { + "description": "Cloud account uid", + "type": "string" + } + } + }, + "v1AzureAccount": { + "description": "Azure account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "tenantId", + "clientId", + "clientSecret" + ], + "properties": { + "azureEnvironment": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "AzurePublicCloud", + "enum": [ + "AzureChinaCloud", + "AzurePublicCloud", + "AzureUSGovernment", + "AzureUSGovernmentCloud" + ] + }, + "clientId": { + "description": "Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application", + "type": "string" + }, + "clientSecret": { + "description": "ClientSecret is the secret associated with Client", + "type": "string" + }, + "settings": { + "description": "Cloud account settings", + "type": "object", + "properties": { + "disablePropertiesRequest": { + "description": "Will disable certain properties request to cloud and the input is collected directly from the user", + "type": "boolean", + "x-omitempty": false + } + } + }, + "tenantId": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + }, + "tenantName": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1AzureAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Azure account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "tenantId", + "clientId", + "clientSecret" + ], + "properties": { + "azureEnvironment": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "AzurePublicCloud", + "enum": [ + "AzureChinaCloud", + "AzurePublicCloud", + "AzureUSGovernment", + "AzureUSGovernmentCloud" + ] + }, + "clientId": { + "description": "Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application", + "type": "string" + }, + "clientSecret": { + "description": "ClientSecret is the secret associated with Client", + "type": "string" + }, + "settings": { + "description": "Cloud account settings", + "type": "object", + "properties": { + "disablePropertiesRequest": { + "description": "Will disable certain properties request to cloud and the input is collected directly from the user", + "type": "boolean", + "x-omitempty": false + } + } + }, + "tenantId": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + }, + "tenantName": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AzureAvailabilityZone": { + "description": "Azure availability zone", + "type": "object", + "properties": { + "name": { + "description": "Azure availability zone name", + "type": "string" + } + } + }, + "v1AzureCloudAccount": { + "type": "object", + "required": [ + "tenantId", + "clientId", + "clientSecret" + ], + "properties": { + "azureEnvironment": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "AzurePublicCloud", + "enum": [ + "AzureChinaCloud", + "AzurePublicCloud", + "AzureUSGovernment", + "AzureUSGovernmentCloud" + ] + }, + "clientId": { + "description": "Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application", + "type": "string" + }, + "clientSecret": { + "description": "ClientSecret is the secret associated with Client", + "type": "string" + }, + "settings": { + "description": "Cloud account settings", + "type": "object", + "properties": { + "disablePropertiesRequest": { + "description": "Will disable certain properties request to cloud and the input is collected directly from the user", + "type": "boolean", + "x-omitempty": false + } + } + }, + "tenantId": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + }, + "tenantName": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + } + } + }, + "v1AzureCloudClusterConfigEntity": { + "description": "Azure cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + } + } + }, + "v1AzureCloudConfig": { + "description": "AzureCloudConfig is the Schema for the azurecloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "AzureCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotVMOptions": { + "description": "SpotVMOptions defines the options relevant to running the Machine on Spot VMs", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "status": { + "description": "AzureCloudConfigStatus defines the observed state of AzureCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "images": { + "description": "Refers to Azure Shared Gallery image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "state": { + "type": "string" + }, + "subscriptionID": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + }, + "vhdImage": { + "description": "Mold always create VHD image for custom image, and this can be use as golden images", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1AzureCloudConfigSpec": { + "description": "AzureCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotVMOptions": { + "description": "SpotVMOptions defines the options relevant to running the Machine on Spot VMs", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "v1AzureCloudConfigStatus": { + "description": "AzureCloudConfigStatus defines the observed state of AzureCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "images": { + "description": "Refers to Azure Shared Gallery image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "state": { + "type": "string" + }, + "subscriptionID": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + }, + "vhdImage": { + "description": "Mold always create VHD image for custom image, and this can be use as golden images", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1AzureClusterConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + }, + "v1AzureGroup": { + "description": "Azure group entity", + "type": "object", + "properties": { + "id": { + "description": "Azure group id", + "type": "string" + }, + "name": { + "description": "Azure group name", + "type": "string" + } + } + }, + "v1AzureGroups": { + "description": "List of Azure groups", + "type": "object", + "required": [ + "groups" + ], + "properties": { + "groups": { + "type": "array", + "items": { + "description": "Azure group entity", + "type": "object", + "properties": { + "id": { + "description": "Azure group id", + "type": "string" + }, + "name": { + "description": "Azure group name", + "type": "string" + } + } + } + } + } + }, + "v1AzureImage": { + "description": "Refers to Azure Shared Gallery image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "state": { + "type": "string" + }, + "subscriptionID": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AzureInstanceTypes": { + "description": "List of Azure instance types", + "type": "object", + "properties": { + "instanceTypes": { + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + } + } + }, + "v1AzureMachine": { + "description": "Azure cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Azure cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "location", + "osDisk" + ], + "properties": { + "additionalTags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allocatePublicIP": { + "type": "boolean" + }, + "availabilityZone": { + "description": "Azure Machine Spec Availability zone", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, + "image": { + "description": "Azure Machine Spec Image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "offer": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "instanceType": { + "type": "string" + }, + "location": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "sshPublicKey": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1AzureMachinePoolCloudConfigEntity": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + } + } + }, + "v1AzureMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotVMOptions": { + "description": "SpotVMOptions defines the options relevant to running the Machine on Spot VMs", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1AzureMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + } + } + }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1AzureMachineSpec": { + "description": "Azure cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "location", + "osDisk" + ], + "properties": { + "additionalTags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allocatePublicIP": { + "type": "boolean" + }, + "availabilityZone": { + "description": "Azure Machine Spec Availability zone", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, + "image": { + "description": "Azure Machine Spec Image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "offer": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "instanceType": { + "type": "string" + }, + "location": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "sshPublicKey": { + "type": "string" + } + } + }, + "v1AzureMachineSpecAvailabilityZone": { + "description": "Azure Machine Spec Availability zone", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, + "v1AzureMachineSpecImage": { + "description": "Azure Machine Spec Image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "offer": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AzureMachines": { + "description": "Azure machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Azure cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Azure cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "location", + "osDisk" + ], + "properties": { + "additionalTags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allocatePublicIP": { + "type": "boolean" + }, + "availabilityZone": { + "description": "Azure Machine Spec Availability zone", + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, + "image": { + "description": "Azure Machine Spec Image", + "type": "object", + "properties": { + "gallery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "offer": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "instanceType": { + "type": "string" + }, + "location": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "sshPublicKey": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1AzureManagedMachinePoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "v1AzureNic": { + "description": "AWS network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1AzureOSDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "v1AzurePrivateDnsZone": { + "description": "Azure Private DNS zone entity", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource Id for the resource", + "type": "string" + }, + "location": { + "description": "The Azure Region where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + } + }, + "v1AzurePrivateDnsZones": { + "description": "List of Azure storage accounts", + "type": "object", + "properties": { + "privateDnsZones": { + "type": "array", + "items": { + "description": "Azure Private DNS zone entity", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource Id for the resource", + "type": "string" + }, + "location": { + "description": "The Azure Region where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + } + } + } + } + }, + "v1AzureRegion": { + "description": "Azure region entity", + "type": "object", + "properties": { + "displayName": { + "description": "Azure region displayname", + "type": "string" + }, + "name": { + "description": "Azure region name", + "type": "string" + }, + "zones": { + "description": "List of zones associated to a particular Azure region", + "type": "array", + "items": { + "description": "Azure availability zone", + "type": "object", + "properties": { + "name": { + "description": "Azure availability zone name", + "type": "string" + } + } + } + } + } + }, + "v1AzureRegions": { + "description": "List of Azure regions", + "type": "object", + "required": [ + "regions" + ], + "properties": { + "regions": { + "type": "array", + "items": { + "description": "Azure region entity", + "type": "object", + "properties": { + "displayName": { + "description": "Azure region displayname", + "type": "string" + }, + "name": { + "description": "Azure region name", + "type": "string" + }, + "zones": { + "description": "List of zones associated to a particular Azure region", + "type": "array", + "items": { + "description": "Azure availability zone", + "type": "object", + "properties": { + "name": { + "description": "Azure availability zone name", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1AzureResourceGroupList": { + "description": "List of Azure resource group", + "type": "object", + "properties": { + "resourceGroupList": { + "type": "array", + "items": { + "description": "Azure resource Group is a container that holds related resources for an Azure solution", + "type": "object", + "properties": { + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "The location of the resource group. It cannot be changed after the resource group has been created", + "type": "string" + }, + "name": { + "description": "The type of the resource group", + "type": "string" + } + } + } + } + } + }, + "v1AzureStorageAccountEntity": { + "description": "Azure Storage Account Entity", + "type": "object", + "properties": { + "storageAccountTypes": { + "type": "array", + "items": { + "description": "Azure storage account entity", + "type": "object", + "properties": { + "id": { + "description": "Azure storage account id", + "type": "string" + }, + "name": { + "description": "Azure storage account name", + "type": "string" + } + } + } + } + } + }, + "v1AzureStorageAccounts": { + "description": "List of Azure storage accounts", + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "description": "Azure storage account provides a unique namespace for your Azure resources", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource", + "type": "string" + }, + "kind": { + "description": "The kind of the resource", + "type": "string" + }, + "location": { + "description": "The geo-location where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + } + } + } + } + }, + "v1AzureStorageConfig": { + "description": "Azure storage config object", + "type": "object", + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + } + }, + "v1AzureStorageContainers": { + "description": "List of Azure storage containers", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Azure storage container organizes a set of blobs, similar to a directory in a file system", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource.", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + }, + "type": { + "description": "The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\"", + "type": "string" + } + } + } + } + } + }, + "v1AzureStorageTypes": { + "description": "List of Azure storage types", + "type": "object", + "properties": { + "storageTypes": { + "type": "array", + "items": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1AzureSubscriptionList": { + "description": "List of Azure subscription", + "type": "object", + "properties": { + "subscriptionList": { + "type": "array", + "items": { + "description": "Azure Subscription Type", + "type": "object", + "properties": { + "authorizationSource": { + "description": "The authorization source of the request. Valid values are one or more combinations of Legacy, RoleBased, Bypassed, Direct and Management", + "type": "string" + }, + "displayName": { + "description": "The subscription display name", + "type": "string" + }, + "state": { + "description": "The subscription state. Possible values are Enabled, Warned, PastDue, Disabled, and Deleted.", + "type": "string" + }, + "subscriptionId": { + "description": "The subscription ID", + "type": "string" + } + } + } + } + } + }, + "v1AzureVHDImage": { + "description": "Mold always create VHD image for custom image, and this can be use as golden images", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1AzureVhdUrlEntity": { + "description": "Azure vhd url entity", + "type": "object", + "properties": { + "name": { + "description": "The name of the resource", + "type": "string" + }, + "url": { + "description": "The url of the Azure Vhd", + "type": "string" + } + } + }, + "v1AzureVirtualNetworkList": { + "description": "List of Azure virtual network", + "type": "object", + "properties": { + "virtualNetworkList": { + "type": "array", + "items": { + "description": "Azure virtual network is the fundamental building block for your private network in Azure.", + "type": "object", + "properties": { + "addressSpaces": { + "description": "Location of the virtual network", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "Location of the virtual network", + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated with Azure VPC", + "type": "array", + "items": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + }, + "type": { + "description": "Type of the virtual network", + "type": "string" + } + } + } + } + } + }, + "v1AzureZoneEntity": { + "description": "List of Azure zone", + "type": "object", + "properties": { + "zoneList": { + "type": "array", + "items": { + "description": "Azure availability zone entity", + "type": "object", + "properties": { + "id": { + "description": "Azure availability zone id", + "type": "string" + } + } + } + } + } + }, + "v1BackupLocationConfig": { + "description": "Backup location configuration", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1BackupRestoreStatusMeta": { + "description": "Backup restored status", + "properties": { + "backupName": { + "type": "string" + }, + "destinationClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "restoreState": { + "type": "string" + } + } + }, + "v1BackupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1BackupStatusConfig": { + "description": "Backup config", + "properties": { + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1BackupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1BasicOciRegistry": { + "description": "Basic oci registry information", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Basic oci registry spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "baseContentPath": { + "description": "OCI registry content base path", + "type": "string" + }, + "basePath": { + "description": "OCI registry api base path", + "type": "string" + }, + "endpoint": { + "description": "OCI registry endpoint", + "type": "string" + }, + "providerType": { + "type": "string", + "default": "helm", + "enum": [ + "helm", + "zarf", + "pack" + ] + }, + "registryUid": { + "description": "Basic oci registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + } + } + }, + "v1BasicOciRegistrySpec": { + "description": "Basic oci registry spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "baseContentPath": { + "description": "OCI registry content base path", + "type": "string" + }, + "basePath": { + "description": "OCI registry api base path", + "type": "string" + }, + "endpoint": { + "description": "OCI registry endpoint", + "type": "string" + }, + "providerType": { + "type": "string", + "default": "helm", + "enum": [ + "helm", + "zarf", + "pack" + ] + }, + "registryUid": { + "description": "Basic oci registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1Billing": { + "description": "billing preference", + "properties": { + "billingDay": { + "type": "integer" + }, + "tierPricing": { + "description": "tier price", + "properties": { + "alloyPricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + }, + "purePricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "v1BrokerLogin": { + "description": "Request for broker login request", + "type": "object", + "properties": { + "subscriberSubjects": { + "description": "subjects that client need to subscribe", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1BrokerToken": { + "description": "Response for broker login request", + "type": "object", + "properties": { + "maxAllowedClients": { + "description": "maximum number of clients that can subscribe to the subject", + "type": "integer" + }, + "msgCtxData": { + "description": "message context data can be used as contextual information for the message exchange", + "additionalProperties": { + "type": "string" + } + }, + "publisherSubjects": { + "description": "subjects that client can publish", + "type": "array", + "items": { + "type": "string" + } + }, + "subscriberSubjects": { + "description": "subjects that client has subscribed", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1BulkDeleteFailure": { + "properties": { + "errMsg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1BulkDeleteRequest": { + "required": [ + "uids" + ], + "properties": { + "uids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1BulkDeleteResponse": { + "properties": { + "deletedCount": { + "type": "integer", + "x-omitempty": false + }, + "failures": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "errMsg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "x-omitempty": false + }, + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1BulkEvents": { + "description": "Describes a list component events' details", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the component event details", + "type": "object", + "properties": { + "involvedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "message": { + "description": "Describes message associated with the event", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "reason": { + "description": "Describes the reason for the event", + "type": "string" + }, + "relatedObject": { + "description": "Object for which the event is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "severity": { + "description": "Describes the gravitas for the event", + "type": "string" + }, + "source": { + "description": "Describes the origin for the event", + "type": "object", + "properties": { + "component": { + "description": "Describes the component where event originated", + "type": "string" + }, + "host": { + "description": "Describes the host where event originated", + "type": "string" + } + } + } + } + } + }, + "v1CPU": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "v1CPUPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "v1Card": { + "description": "Card details object", + "properties": { + "brand": { + "description": "Card brand", + "type": "string" + }, + "country": { + "description": "Country name the card belongs", + "type": "string" + }, + "expYear": { + "description": "Expiry year of the card", + "type": "number", + "format": "uint64" + }, + "fingerPrint": { + "description": "Finger print", + "type": "string" + }, + "funding": { + "description": "Funding", + "type": "string" + }, + "last4": { + "description": "Last 4 digit of the card", + "type": "string" + } + } + }, + "v1Cert": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1Certificate": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + }, + "v1CertificateAuthority": { + "description": "Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + }, + "v1Channel": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + }, + "v1CleanUpResource": { + "description": "Resources of tenant", + "type": "object", + "properties": { + "activeResources": { + "description": "Active resources of tenant", + "type": "object", + "properties": { + "activeResources": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "tenantStatus": { + "description": "Tenant CleanUp Status", + "type": "object", + "properties": { + "cleanUpError": { + "type": "string" + }, + "cleanUpStages": { + "type": "string" + }, + "cleanUpTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "isInProgress": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1CloudAccountMeta": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1CloudAccountMetadata": { + "description": "Cloud account metadata summary", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + } + } + }, + "v1CloudAccountSettings": { + "description": "Cloud account settings", + "type": "object", + "properties": { + "disablePropertiesRequest": { + "description": "Will disable certain properties request to cloud and the input is collected directly from the user", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1CloudAccountStatus": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + }, + "v1CloudAccountSummary": { + "description": "Cloud account summary", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Cloud account spec summary", + "type": "object", + "properties": { + "accountId": { + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1CloudAccountUidEntity": { + "description": "Cloud account uid entity", + "type": "object", + "properties": { + "uid": { + "description": "Cloud account uid", + "type": "string" + } + } + }, + "v1CloudAccountsMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cloud account metadata summary", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + } + } + } + } + } + }, + "v1CloudAccountsPatch": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + }, + "v1CloudAccountsSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cloud account summary", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Cloud account spec summary", + "type": "object", + "properties": { + "accountId": { + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1CloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "v1CloudConfigMeta": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + } + }, + "v1CloudCost": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1CloudCostDataPoint": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1CloudInstanceRateConfig": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "v1CloudMachineStatus": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1CloudRate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1CloudResourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1CloudSpotPrice": { + "description": "Spot price entity of a particular cloud type", + "type": "object", + "properties": { + "spotPrice": { + "description": "Spot price of a resource for a particular cloud", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1CloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "v1ClusterBackup": { + "description": "Cluster Backup", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Backup Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "config": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + }, + "status": { + "description": "Cluster Backup Status", + "properties": { + "clusterBackupStatuses": { + "type": "array", + "items": { + "description": "Cluster Backup Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupConfig": { + "description": "Backup config", + "properties": { + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "backupLocationConfig": { + "description": "Backup location configuration", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupRequestUid": { + "type": "string" + }, + "backupStatusMeta": { + "type": "array", + "items": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "restoreStatusMeta": { + "type": "array", + "items": { + "description": "Backup restored status", + "properties": { + "backupName": { + "type": "string" + }, + "destinationClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "restoreState": { + "type": "string" + } + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterBackupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "v1ClusterBackupLocationType": { + "description": "Cluster backup location type", + "required": [ + "locationType" + ], + "properties": { + "locationType": { + "type": "string" + } + } + }, + "v1ClusterBackupSpec": { + "description": "Cluster Backup Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "config": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + }, + "v1ClusterBackupStatus": { + "description": "Cluster Backup Status", + "properties": { + "clusterBackupStatuses": { + "type": "array", + "items": { + "description": "Cluster Backup Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupConfig": { + "description": "Backup config", + "properties": { + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "backupLocationConfig": { + "description": "Backup location configuration", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupRequestUid": { + "type": "string" + }, + "backupStatusMeta": { + "type": "array", + "items": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "restoreStatusMeta": { + "type": "array", + "items": { + "description": "Backup restored status", + "properties": { + "backupName": { + "type": "string" + }, + "destinationClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "restoreState": { + "type": "string" + } + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterBackupStatusMeta": { + "description": "Cluster Backup Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupConfig": { + "description": "Backup config", + "properties": { + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "backupLocationConfig": { + "description": "Backup location configuration", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupRequestUid": { + "type": "string" + }, + "backupStatusMeta": { + "type": "array", + "items": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "restoreStatusMeta": { + "type": "array", + "items": { + "description": "Backup restored status", + "properties": { + "backupName": { + "type": "string" + }, + "destinationClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "restoreState": { + "type": "string" + } + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterComplianceOnDemandConfig": { + "description": "Cluster compliance scan on demand configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan config for kube bench driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan config for kube hunter driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan config for sonobuoy driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "syft": { + "description": "Cluster compliance scan config for syft driver", + "properties": { + "config": { + "description": "Cluster compliance scan specification", + "properties": { + "format": { + "type": "string", + "enum": [ + "cyclonedx-json", + "github-json", + "spdx-json", + "syft-json" + ] + }, + "labelSelector": { + "type": "string" + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "cluster", + "namespace", + "label-selector", + "pod" + ] + } + } + }, + "runScan": { + "type": "boolean" + } + } + } + } + }, + "v1ClusterComplianceScan": { + "description": "Cluster Compliance Scan", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverSpec": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan driver spec", + "properties": { + "config": { + "description": "Compliance Scan config", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "isClusterConfig": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "v1ClusterComplianceScanKubeBenchConfig": { + "description": "Cluster compliance scan config for kube bench driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanKubeBenchScheduleConfig": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "v1ClusterComplianceScanKubeHunterConfig": { + "description": "Cluster compliance scan config for kube hunter driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanKubeHunterScheduleConfig": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "v1ClusterComplianceScanLogSpec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "v1ClusterComplianceScanLogs": { + "description": "Cluster compliance scan Logs", + "properties": { + "kubeBenchLogs": { + "type": "array", + "items": { + "description": "Cluster compliance scan KubeBench Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeBench Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "kubeHunterLogs": { + "type": "array", + "items": { + "description": "Cluster compliance scan KubeHunter Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeHunter Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilites": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "sonobuoyLogs": { + "type": "array", + "items": { + "description": "Cluster compliance scan Sonobuoy Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Sonobuoy Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "syftLogs": { + "type": "array", + "items": { + "description": "Cluster Compliance Scan Syft Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Syft Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterComplianceScanSonobuoyConfig": { + "description": "Cluster compliance scan config for sonobuoy driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanSonobuoyScheduleConfig": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "v1ClusterComplianceScanSpec": { + "description": "Cluster compliance scan Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverSpec": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan driver spec", + "properties": { + "config": { + "description": "Compliance Scan config", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "isClusterConfig": { + "type": "boolean" + } + } + } + } + } + }, + "v1ClusterComplianceScanSyftConfig": { + "description": "Cluster compliance scan config for syft driver", + "properties": { + "config": { + "description": "Cluster compliance scan specification", + "properties": { + "format": { + "type": "string", + "enum": [ + "cyclonedx-json", + "github-json", + "spdx-json", + "syft-json" + ] + }, + "labelSelector": { + "type": "string" + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "cluster", + "namespace", + "label-selector", + "pod" + ] + } + } + }, + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanSyftDriverConfig": { + "description": "Cluster compliance scan specification", + "properties": { + "format": { + "type": "string", + "enum": [ + "cyclonedx-json", + "github-json", + "spdx-json", + "syft-json" + ] + }, + "labelSelector": { + "type": "string" + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "cluster", + "namespace", + "label-selector", + "pod" + ] + } + } + }, + "v1ClusterComplianceScheduleConfig": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + }, + "v1ClusterCondition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1ClusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "machineHealthConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + } + }, + "v1ClusterConfigEntity": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "v1ClusterConfigResponse": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + }, + "v1ClusterDefinitionEntity": { + "description": "Cluster definition entity", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster definition spec entity", + "type": "object", + "required": [ + "profiles", + "cloudType" + ], + "properties": { + "cloudType": { + "type": "string" + }, + "profiles": { + "description": "Cluster definition profiles", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster definition profile entity", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterDefinitionProfileEntity": { + "description": "Cluster definition profile entity", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + }, + "v1ClusterDefinitionSpecEntity": { + "description": "Cluster definition spec entity", + "type": "object", + "required": [ + "profiles", + "cloudType" + ], + "properties": { + "cloudType": { + "type": "string" + }, + "profiles": { + "description": "Cluster definition profiles", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster definition profile entity", + "type": "object", + "required": [ + "uid" + ], + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + }, + "v1ClusterEdgeInstallerConfig": { + "properties": { + "installerDownloadLinks": { + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1ClusterFeatureActor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterFeatureSchedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + }, + "v1ClusterFips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "v1ClusterFipsMode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + }, + "v1ClusterGroup": { + "description": "Cluster group information", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster group specifications", + "properties": { + "clusterProfileTemplates": { + "description": "ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec. It consists of list of add on profiles at a cluster group level which will be enforced on all virtual cluster. ClusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "hostCluster" + ] + } + } + }, + "status": { + "description": "Cluster group status", + "properties": { + "isActive": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterGroupClusterRef": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1ClusterGroupClustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + }, + "v1ClusterGroupEntity": { + "description": "Cluster group information", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster group specifications request entity", + "properties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "hostCluster" + ] + } + } + } + } + }, + "v1ClusterGroupHostClusterConfig": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterGroupHostClusterEntity": { + "description": "Clusters and clusters config of cluster group", + "properties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + } + } + }, + "v1ClusterGroupLimitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "v1ClusterGroupResource": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ClusterGroupSpec": { + "description": "Cluster group specifications", + "properties": { + "clusterProfileTemplates": { + "description": "ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec. It consists of list of add on profiles at a cluster group level which will be enforced on all virtual cluster. ClusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "hostCluster" + ] + } + } + }, + "v1ClusterGroupSpecEntity": { + "description": "Cluster group specifications request entity", + "properties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "hostCluster" + ] + } + } + }, + "v1ClusterGroupStatus": { + "description": "Cluster group status", + "properties": { + "isActive": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ClusterGroupSummary": { + "description": "Cluster group summay", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster group summay spec", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "cpu": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "endpointType": { + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "hostClustersCount": { + "type": "integer", + "x-omitempty": false + }, + "memory": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "scope": { + "type": "string" + }, + "virtualClustersCount": { + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterGroupSummarySpec": { + "description": "Cluster group summay spec", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "cpu": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "endpointType": { + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "hostClustersCount": { + "type": "integer", + "x-omitempty": false + }, + "memory": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "scope": { + "type": "string" + }, + "virtualClustersCount": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1ClusterGroupsDeveloperCreditUsage": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocatedCredit": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + }, + "usedCredit": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterGroupsHostClusterMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Object scope identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterGroupsHostClusterSummary": { + "type": "object", + "required": [ + "summaries" + ], + "properties": { + "summaries": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group summay", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster group summay spec", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "cpu": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "endpointType": { + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "hostClustersCount": { + "type": "integer", + "x-omitempty": false + }, + "memory": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "scope": { + "type": "string" + }, + "virtualClustersCount": { + "type": "integer", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1ClusterHelmChart": { + "description": "Cluster helm chart metadata", + "properties": { + "localName": { + "type": "string" + }, + "matchedRegistries": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster helm registry information", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ClusterHelmCharts": { + "description": "Cluster helm charts metadata", + "properties": { + "charts": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster helm chart metadata", + "properties": { + "localName": { + "type": "string" + }, + "matchedRegistries": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster helm registry information", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterHelmRegistry": { + "description": "Cluster helm registry information", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "v1ClusterKubeBenchLogStatus": { + "description": "Cluster compliance scan KubeBench Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterKubeHunterLogStatus": { + "description": "Cluster compliance scan KubeHunter Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilites": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterKubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "v1ClusterLocation": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "v1ClusterLogFetcher": { + "description": "Cluster Log Fetcher", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Log Fetcher Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "log": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster Log Fetcher Status", + "properties": { + "state": { + "type": "string" + } + } + } + } + }, + "v1ClusterLogFetcherK8sRequest": { + "description": "Cluster Log Fetcher K8s", + "properties": { + "labelSelector": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1ClusterLogFetcherNodeRequest": { + "description": "Cluster Log Fetcher Node Request", + "properties": { + "logs": { + "description": "Array of logs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1ClusterLogFetcherRequest": { + "description": "Cluster Log Fetcher Request", + "properties": { + "duration": { + "description": "Duration for which log is requested", + "type": "integer", + "format": "int64", + "default": 10 + }, + "k8s": { + "description": "Cluster Log Fetcher K8s", + "properties": { + "labelSelector": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "mode": { + "description": "Accepted Values - [\"cluster\", \"app\"]. if \"app\" then logs will be fetched from the virtual cluster", + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "app" + ] + }, + "noOfLines": { + "description": "No of lines of logs requested", + "type": "integer", + "format": "int64", + "default": 1000 + }, + "node": { + "description": "Cluster Log Fetcher Node Request", + "properties": { + "logs": { + "description": "Array of logs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterLogFetcherSpec": { + "description": "Cluster Log Fetcher Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "log": { + "type": "string" + } + } + }, + "v1ClusterLogFetcherStatus": { + "description": "Cluster Log Fetcher Status", + "properties": { + "state": { + "type": "string" + } + } + }, + "v1ClusterManifest": { + "description": "Cluster manifest information", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1ClusterManifests": { + "description": "Cluster manifests information", + "properties": { + "manifests": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster manifest information", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterMeta": { + "description": "Active cluster meta", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "duration": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectName": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterMetaAttributeEntity": { + "description": "Cluster additional metadata entity", + "type": "object", + "properties": { + "clusterMetaAttribute": { + "type": "string" + } + } + }, + "v1ClusterMetaSpecLocation": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "v1ClusterMetaStatusCost": { + "description": "Cluster meta Cost information", + "type": "object", + "properties": { + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ClusterMetaStatusHealth": { + "description": "Cluster meta health information", + "type": "object", + "properties": { + "isHeartBeatFailed": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterMetaStatusUpdates": { + "description": "Cluster meta updates information", + "type": "object", + "properties": { + "isUpdatesPending": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ClusterNamespace": { + "description": "Cluster's namespace", + "properties": { + "namespace": { + "type": "string" + }, + "pvcCount": { + "type": "number", + "format": "int32" + } + } + }, + "v1ClusterNamespaceResource": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + }, + "status": { + "description": "Cluster namespace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterNamespaceResourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + }, + "v1ClusterNamespaceResourceInputEntity": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + }, + "v1ClusterNamespaceResources": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + }, + "status": { + "description": "Cluster namespace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1ClusterNamespaceResourcesUpdateEntity": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + } + } + }, + "v1ClusterNamespaceSpec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + }, + "v1ClusterNamespaceStatus": { + "description": "Cluster namespace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterNamespaces": { + "description": "Cluster's available namespaces", + "properties": { + "namespaces": { + "type": "array", + "items": { + "description": "Cluster's namespace", + "properties": { + "namespace": { + "type": "string" + }, + "pvcCount": { + "type": "number", + "format": "int32" + } + } + } + } + } + }, + "v1ClusterNotificationStatus": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ClusterNotificationUpdateEntity": { + "description": "Cluster input for notification update", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile notification update request payload", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + }, + "spcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } + } + } + }, + "v1ClusterPackManifestStatus": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterPackStatus": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ClusterPreference": { + "description": "cluster preference", + "properties": { + "archivalIntervalInHour": { + "description": "clusters cleanup interval post deletion", + "type": "integer" + }, + "deletePeriodInHour": { + "description": "clusters deleted before delete period are eligible for cleanup", + "type": "integer" + }, + "healthPollIntervalInMinutes": { + "description": "clusters health poll interval", + "type": "integer", + "maximum": 60, + "minimum": 3 + }, + "monitorIntervalInMinutes": { + "description": "clusters state and consistency monitor", + "type": "integer" + } + } + }, + "v1ClusterProfile": { + "description": "ClusterProfile is the Schema for the clusterprofiles API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions", + "type": "object", + "properties": { + "draft": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "published": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "ClusterProfileStatus defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterProfileCloneEntity": { + "description": "Cluster profile clone request payload", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster profile clone metadata", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Cloned cluster profile name", + "type": "string" + }, + "target": { + "description": "Cluster profile clone meta input entity", + "type": "object", + "required": [ + "scope" + ], + "properties": { + "projectUid": { + "description": "Cloned cluster profile project uid", + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + } + } + }, + "version": { + "description": "Cloned cluster profile version", + "type": "string" + } + } + } + } + }, + "v1ClusterProfileCloneMetaInputEntity": { + "description": "Cluster profile clone metadata", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Cloned cluster profile name", + "type": "string" + }, + "target": { + "description": "Cluster profile clone meta input entity", + "type": "object", + "required": [ + "scope" + ], + "properties": { + "projectUid": { + "description": "Cloned cluster profile project uid", + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + } + } + }, + "version": { + "description": "Cloned cluster profile version", + "type": "string" + } + } + }, + "v1ClusterProfileCloneTarget": { + "description": "Cluster profile clone meta input entity", + "type": "object", + "required": [ + "scope" + ], + "properties": { + "projectUid": { + "description": "Cloned cluster profile project uid", + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + } + } + }, + "v1ClusterProfileEntity": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "template": { + "description": "Cluster profile template spec", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + } + } + }, + "v1ClusterProfileFilterSpec": { + "description": "Cluster profile filter spec", + "properties": { + "environment": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "fips": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + }, + "profileName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "profileType": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project" + ] + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "version": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "v1ClusterProfileFips": { + "description": "Cluster profile fips compliance status", + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "v1ClusterProfileImportEntity": { + "description": "Cluster profile import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster profile import metadata", + "type": "object", + "properties": { + "description": { + "description": "Cluster profile description", + "type": "string" + }, + "labels": { + "description": "Cluster profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Cluster profile name", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile import spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile import template", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + } + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + } + } + }, + "v1ClusterProfileMetadata": { + "description": "Cluster profile filter spec", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "properties": { + "cloudType": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "v1ClusterProfileMetadataImportEntity": { + "description": "Cluster profile import metadata", + "type": "object", + "properties": { + "description": { + "description": "Cluster profile description", + "type": "string" + }, + "labels": { + "description": "Cluster profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Cluster profile name", + "type": "string" + } + } + }, + "v1ClusterProfileNotificationUpdateEntity": { + "description": "Cluster profile notification update request payload", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + }, + "v1ClusterProfilePackConfigList": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack configuration", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "associatedObject": { + "type": "string" + }, + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterProfilePackManifests": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack manifests spec", + "type": "object", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + }, + "v1ClusterProfilePackSummary": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "type": "object", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", + "x-omitempty": false + } + } + }, + "v1ClusterProfilePacksEntities": { + "description": "List of cluster profile packs", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + } + } + }, + "v1ClusterProfilePacksEntity": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + }, + "v1ClusterProfilePacksManifests": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack manifests spec", + "type": "object", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + } + } + } + } + }, + "v1ClusterProfileScope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project" + ] + }, + "v1ClusterProfileSortFields": { + "type": "string", + "enum": [ + "profileName", + "environment", + "profileType", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1ClusterProfileSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "profileName", + "environment", + "profileType", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1ClusterProfileSpec": { + "description": "ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions", + "type": "object", + "properties": { + "draft": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "published": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterProfileSpecEntity": { + "description": "Cluster profile update spec", + "type": "object", + "properties": { + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + }, + "v1ClusterProfileSpecImportEntity": { + "description": "Cluster profile import spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile import template", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + } + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + }, + "v1ClusterProfileStatus": { + "description": "ClusterProfileStatus defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ClusterProfileStatusSummary": { + "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "fips": { + "description": "Cluster profile fips compliance status", + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + }, + "pack": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "type": "object", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterProfileSummary": { + "description": "Cluster profile summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Cluster profile spec summary", + "type": "object", + "properties": { + "draft": { + "description": "Cluster profile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + } + } + }, + "published": { + "description": "Cluster profile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + } + } + }, + "version": { + "description": "Cluster profile's latest version", + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "fips": { + "description": "Cluster profile fips compliance status", + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + }, + "pack": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "type": "object", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ClusterProfileTemplate": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "v1ClusterProfileTemplateDraft": { + "description": "Cluster profile template spec", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + } + }, + "v1ClusterProfileTemplateImportEntity": { + "description": "Cluster profile import template", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + } + } + }, + "v1ClusterProfileTemplateMeta": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ClusterProfileTemplateSummary": { + "description": "Cluster profile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + } + } + }, + "v1ClusterProfileTemplateUpdate": { + "description": "Cluster profile template update spec", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + } + }, + "v1ClusterProfileUpdateEntity": { + "description": "Cluster profile update request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile update spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile template update spec", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + } + } + }, + "v1ClusterProfileValidatorResponse": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterProfileVersion": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ClusterProfiles": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ClusterProfile is the Schema for the clusterprofiles API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions", + "type": "object", + "properties": { + "draft": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "published": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "ClusterProfileStatus defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterProfilesFilterSpec": { + "description": "Spectro cluster filter summary spec", + "properties": { + "filter": { + "description": "Cluster profile filter spec", + "properties": { + "environment": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "fips": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + }, + "profileName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "profileType": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project" + ] + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "version": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "profileName", + "environment", + "profileType", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1ClusterProfilesMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile filter spec", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "properties": { + "cloudType": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterProfilesSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Cluster profile spec summary", + "type": "object", + "properties": { + "draft": { + "description": "Cluster profile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + } + } + }, + "published": { + "description": "Cluster profile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + } + } + }, + "version": { + "description": "Cluster profile's latest version", + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "fips": { + "description": "Cluster profile fips compliance status", + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + }, + "pack": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "type": "object", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterProxySpec": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + }, + "v1ClusterRbac": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterRbacBinding": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + }, + "v1ClusterRbacEntity": { + "properties": { + "clusterRbac": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterRbacInputEntity": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + }, + "v1ClusterRbacResourcesUpdateEntity": { + "type": "object", + "properties": { + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1ClusterRbacSpec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1ClusterRbacStatus": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterRbacSubjects": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + }, + "v1ClusterRbacs": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1ClusterRefs": { + "description": "Cluster Object References", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + }, + "v1ClusterRepaveSource": { + "type": "string", + "enum": [ + "user", + "hubble", + "palette", + "stylus" + ] + }, + "v1ClusterRepaveState": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + }, + "v1ClusterRepaveStatus": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "v1ClusterResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + }, + "v1ClusterResourceError": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + }, + "v1ClusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterResourcesEntity": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1ClusterRestore": { + "description": "Cluster Restore", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Restore Spec", + "properties": { + "clusterUid": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster Restore Status", + "properties": { + "clusterRestoreStatuses": { + "type": "array", + "items": { + "description": "Cluster Restore Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "restoreRequestUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Restore status meta", + "properties": { + "isSucceeded": { + "type": "boolean" + }, + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "sourceClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterRestoreConfig": { + "description": "Cluster restore config", + "required": [ + "backupRequestUid", + "backupName", + "destinationClusterUid" + ], + "properties": { + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "destinationClusterUid": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + } + } + }, + "v1ClusterRestoreSpec": { + "description": "Cluster Restore Spec", + "properties": { + "clusterUid": { + "type": "string" + } + } + }, + "v1ClusterRestoreStatus": { + "description": "Cluster Restore Status", + "properties": { + "clusterRestoreStatuses": { + "type": "array", + "items": { + "description": "Cluster Restore Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "restoreRequestUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Restore status meta", + "properties": { + "isSucceeded": { + "type": "boolean" + }, + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "sourceClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterRestoreStatusMeta": { + "description": "Cluster Restore Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "restoreRequestUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Restore status meta", + "properties": { + "isSucceeded": { + "type": "boolean" + }, + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "sourceClusterRef": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterRoleRef": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "v1ClusterScanLogKubeBench": { + "description": "Cluster compliance scan KubeBench Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeBench Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1ClusterScanLogKubeHunter": { + "description": "Cluster compliance scan KubeHunter Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan KubeHunter Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilites": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1ClusterScanLogSonobuoy": { + "description": "Cluster compliance scan Sonobuoy Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Sonobuoy Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1ClusterScanLogSyft": { + "description": "Cluster Compliance Scan Syft Log", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster compliance scan Syft Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1ClusterScanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1ClusterSearchInputSpec": { + "properties": { + "inputs": { + "type": "object", + "additionalProperties": { + "properties": { + "values": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "x-omitempty": true + } + } + } + } + } + }, + "v1ClusterSearchInputSpecProperty": { + "properties": { + "values": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "x-omitempty": true + } + } + }, + "v1ClusterSonobuoyLogStatus": { + "description": "Cluster compliance scan Sonobuoy Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "object", + "additionalProperties": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "v1ClusterSyftLogStatus": { + "description": "Cluster compliance scan Syft Log Status", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "location": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "message": { + "type": "string" + }, + "reports": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "scanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "scanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterType": { + "type": "string", + "default": "PureManage", + "enum": [ + "PureManage", + "PureAttach" + ] + }, + "v1ClusterUpgradeSettingsEntity": { + "properties": { + "spectroComponents": { + "type": "string", + "enum": [ + "lock", + "unlock" + ] + } + } + }, + "v1ClusterUsageSummary": { + "description": "Cluster usage summary", + "type": "object", + "properties": { + "cpuCores": { + "type": "number", + "x-omitempty": false + }, + "isAlloy": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterVirtualMachine": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + }, + "v1ClusterVirtualMachineList": { + "description": "VirtualMachineList is a list of virtual machines", + "type": "object", + "required": [ + "items" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "items": { + "type": "array", + "items": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "status": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + } + } + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "type": "object", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "type": "string" + }, + "remainingItemCount": { + "description": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + "type": "integer", + "format": "int64" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + } + } + } + } + }, + "v1ClusterVirtualMachineSpec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "type": "object", + "required": [ + "template" + ], + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "type": "array", + "items": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + } + }, + "instancetype": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "preference": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "v1ClusterVirtualMachineStatus": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "type": "object", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "type": "array", + "items": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "type": "array", + "items": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + } + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + } + } + }, + "x-nullable": true + }, + "v1ClusterVirtualPacksValue": { + "description": "Virtual cluster packs value", + "type": "object", + "properties": { + "distroType": { + "type": "string" + }, + "layer": { + "type": "string" + }, + "values": { + "type": "string" + } + } + }, + "v1ClusterVirtualPacksValues": { + "description": "Virtual cluster packs values", + "type": "object", + "properties": { + "packs": { + "type": "array", + "items": { + "description": "Virtual cluster packs value", + "type": "object", + "properties": { + "distroType": { + "type": "string" + }, + "layer": { + "type": "string" + }, + "values": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterWorkload": { + "description": "Cluster workload summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload spec", + "type": "object", + "properties": { + "clusterroleBindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "cronJobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } + } + } + }, + "roleBindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "statefulSets": { + "type": "array", + "items": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadCondition": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1ClusterWorkloadCronJob": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1ClusterWorkloadCronJobSpec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "v1ClusterWorkloadCronJobStatus": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1ClusterWorkloadCronJobs": { + "description": "Cluster workload cronjobs summary", + "type": "object", + "properties": { + "cronJobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadDaemonSet": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1ClusterWorkloadDaemonSetStatus": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ClusterWorkloadDaemonSets": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadDeployment": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ClusterWorkloadDeploymentStatus": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterWorkloadDeployments": { + "description": "Cluster workload deployments summary", + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadJob": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1ClusterWorkloadJobStatus": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ClusterWorkloadJobs": { + "description": "Cluster workload jobs summary", + "type": "object", + "properties": { + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadMetadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "v1ClusterWorkloadNamespace": { + "description": "Cluster workload namespace summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { + "type": "string" + } + } + } + } + }, + "v1ClusterWorkloadNamespaceStatus": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { + "type": "string" + } + } + }, + "v1ClusterWorkloadNamespaces": { + "description": "Cluster workload namespaces summary", + "properties": { + "namespaces": { + "type": "array", + "items": { + "description": "Cluster workload namespace summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadPod": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } + } + }, + "v1ClusterWorkloadPodContainer": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + }, + "v1ClusterWorkloadPodContainerResource": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "v1ClusterWorkloadPodContainerResources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + }, + "v1ClusterWorkloadPodContainerState": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterWorkloadPodContainerStatus": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1ClusterWorkloadPodMetadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "v1ClusterWorkloadPodSpec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "v1ClusterWorkloadPodStatus": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + }, + "v1ClusterWorkloadPodVolume": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1ClusterWorkloadPods": { + "description": "Cluster workload pods summary", + "properties": { + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadRef": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterWorkloadReplicaStatus": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "v1ClusterWorkloadRoleBinding": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + }, + "v1ClusterWorkloadRoleBindings": { + "description": "Cluster workload rbac bindings summary", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadSpec": { + "description": "Cluster workload spec", + "type": "object", + "properties": { + "clusterroleBindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "cronJobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } + } + } + }, + "roleBindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "statefulSets": { + "type": "array", + "items": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadStatefulSet": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ClusterWorkloadStatefulSetStatus": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + }, + "v1ClusterWorkloadStatefulSets": { + "description": "Cluster workload statefulsets summary", + "type": "object", + "properties": { + "statefulSets": { + "type": "array", + "items": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + }, + "v1ClusterWorkloadsFilter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1ClusterWorkloadsSpec": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + }, + "v1ClustersInfo": { + "description": "Active clusters information", + "type": "object", + "properties": { + "clustersMeta": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Active cluster meta", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "duration": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectName": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "totalActiveClusters": { + "type": "number", + "format": "int64" + }, + "totalActiveGreenFieldClusters": { + "type": "number", + "format": "int64" + }, + "totalActiveImportedClusters": { + "type": "number", + "format": "int64" + }, + "totalClustersDeleted": { + "type": "number", + "format": "int64" + }, + "totalClustersDeployed": { + "type": "number", + "format": "int64" + } + } + }, + "v1ComplianceScanConfig": { + "description": "Compliance Scan config", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "v1ComplianceScanDriverSpec": { + "description": "Compliance Scan driver spec", + "properties": { + "config": { + "description": "Compliance Scan config", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "isClusterConfig": { + "type": "boolean" + } + } + }, + "v1ComputeMetrics": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1ComputeRate": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "v1ConfigReverseProxy": { + "description": "Describes the reverse proxy configuration", + "properties": { + "caCert": { + "description": "Describes the ca certificate for system's reverse proxy", + "type": "string" + }, + "clientCert": { + "description": "Describes the client certificate for system's reverse proxy", + "type": "string" + }, + "clientKey": { + "description": "Describes the client certificate key for system's reverse proxy", + "type": "string" + }, + "port": { + "description": "Describes the system's reverse proxy server port", + "type": "integer" + }, + "protocol": { + "description": "Describes the system's reverse proxy server protocol. Possible values [https, http]", + "type": "string", + "enum": [ + "http", + "https" + ] + }, + "server": { + "description": "Describes the system's reverse proxy server", + "type": "string" + } + } + }, + "v1ConstraintError": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "v1ConstraintValidatorResponse": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "v1ConstraintValidatorResult": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + }, + "v1ControlPlaneEndPoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "v1ControlPlaneHealthCheckTimeoutEntity": { + "type": "object", + "properties": { + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes", + "type": "string" + } + } + }, + "v1CustomAccount": { + "description": "Custom account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "credentials" + ], + "properties": { + "credentials": { + "description": "Cloud account credentials", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1CustomAccountEntity": { + "description": "Custom account information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "credentials" + ], + "properties": { + "credentials": { + "description": "Cloud account credentials", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "v1CustomAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Custom account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "credentials" + ], + "properties": { + "credentials": { + "description": "Cloud account credentials", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1CustomCloudAccount": { + "type": "object", + "required": [ + "credentials" + ], + "properties": { + "credentials": { + "description": "Cloud account credentials", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1CustomCloudClusterConfigEntity": { + "description": "Custom cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + } + } + } + }, + "v1CustomCloudConfig": { + "description": "CustomCloudConfig is the Schema for the custom cloudconfigs API", + "type": "object", + "properties": { + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "CustomCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + }, + "values": { + "description": "YAML string for machine", + "type": "string" + } + } + } + } + } + } + } + }, + "v1CustomCloudConfigSpec": { + "description": "CustomCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + }, + "values": { + "description": "YAML string for machine", + "type": "string" + } + } + } + } + } + }, + "v1CustomCloudMetaEntity": { + "description": "Custom cloud meta entity", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Custom cloud spec response entity", + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" + } + } + } + } + }, + "v1CustomCloudMetaSpecEntity": { + "description": "Custom cloud spec response entity", + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" + } + } + }, + "v1CustomCloudRateConfig": { + "description": "Private cloud rate config", + "properties": { + "cloudType": { + "type": "string" + }, + "rateConfig": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + }, + "v1CustomCloudRequestEntity": { + "description": "Custom cloud request entity", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Custom cloud request entity spec", + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isControlPlaneManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" + } + } + } + } + }, + "v1CustomCloudSpecEntity": { + "description": "Custom cloud request entity spec", + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isControlPlaneManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" + } + } + }, + "v1CustomCloudType": { + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "cloudFamily": { + "description": "Cloud grouping as family", + "type": "string" + }, + "displayName": { + "description": "Custom cloudtype displayName", + "type": "string" + }, + "isCustom": { + "description": "If it is a custom cloudtype", + "type": "boolean", + "x-omitempty": false + }, + "isManaged": { + "description": "If custom cloudtype is managed", + "type": "boolean", + "x-omitempty": false + }, + "isVertex": { + "description": "If cloud is support for Vertex env", + "type": "boolean", + "x-omitempty": false + }, + "logo": { + "description": "Custom cloudtype logo", + "type": "string" + }, + "name": { + "description": "Custom cloudtype name", + "type": "string" + } + } + }, + "v1CustomCloudTypeCloudAccountKeys": { + "description": "Custom cloudType custom cloud account keys", + "type": "object", + "properties": { + "keys": { + "description": "Array of custom cloud type cloud account keys", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1CustomCloudTypeContentResponse": { + "description": "Custom cloudType content response", + "type": "object", + "properties": { + "yaml": { + "description": "custom cloud type content", + "type": "string" + } + } + }, + "v1CustomCloudTypes": { + "description": "Custom cloudType content response", + "type": "object", + "properties": { + "cloudTypes": { + "description": "Array of custom cloud types", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "cloudFamily": { + "description": "Cloud grouping as family", + "type": "string" + }, + "displayName": { + "description": "Custom cloudtype displayName", + "type": "string" + }, + "isCustom": { + "description": "If it is a custom cloudtype", + "type": "boolean", + "x-omitempty": false + }, + "isManaged": { + "description": "If custom cloudtype is managed", + "type": "boolean", + "x-omitempty": false + }, + "isVertex": { + "description": "If cloud is support for Vertex env", + "type": "boolean", + "x-omitempty": false + }, + "logo": { + "description": "Custom cloudtype logo", + "type": "string" + }, + "name": { + "description": "Custom cloudtype name", + "type": "string" + } + } + } + } + } + }, + "v1CustomClusterConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + } + }, + "v1CustomClusterConfigEntity": { + "type": "object", + "properties": { + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "v1CustomInstanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a custom machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a custom machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number in a custom machine", + "type": "integer", + "format": "int32" + } + } + }, + "v1CustomMachine": { + "description": "Custom cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Custom cloud VM definition spec", + "properties": { + "cloudType": { + "type": "string" + }, + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a custom machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a custom machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number in a custom machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Custom network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1CustomMachinePoolBaseConfigEntity": { + "description": "Machine pool configuration for the custom cluster", + "type": "object", + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1CustomMachinePoolCloudConfigEntity": { + "type": "object", + "properties": { + "values": { + "description": "Machine pool configuration as yaml content", + "type": "string" + } + } + }, + "v1CustomMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + }, + "values": { + "description": "YAML string for machine", + "type": "string" + } + } + }, + "v1CustomMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "values": { + "description": "Machine pool configuration as yaml content", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the custom cluster", + "type": "object", + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1CustomMachineSpec": { + "description": "Custom cloud VM definition spec", + "properties": { + "cloudType": { + "type": "string" + }, + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a custom machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a custom machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number in a custom machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Custom network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "v1CustomMachines": { + "description": "List of Custom machines", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Custom cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Custom cloud VM definition spec", + "properties": { + "cloudType": { + "type": "string" + }, + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a custom machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a custom machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number in a custom machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Custom network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1CustomNic": { + "description": "Custom network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1DashboardWorkspace": { + "description": "Workspace information", + "properties": { + "meta": { + "description": "Deprecated. Workspace meta data", + "properties": { + "clusterNames": { + "description": "Deprecated. Use clusterRefs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace spec summary", + "properties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace quota resource allocation", + "properties": { + "cpu": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memory": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + }, + "status": { + "description": "Workspace status", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace namespace allocation", + "properties": { + "name": { + "type": "string" + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + "v1DashboardWorkspaceAllocation": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1DashboardWorkspaceClusterRef": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1DashboardWorkspaceMeta": { + "description": "Deprecated. Workspace meta data", + "properties": { + "clusterNames": { + "description": "Deprecated. Use clusterRefs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + }, + "v1DashboardWorkspaceNamespaceAllocation": { + "description": "Workspace namespace allocation", + "properties": { + "name": { + "type": "string" + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1DashboardWorkspaceQuota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace quota resource allocation", + "properties": { + "cpu": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memory": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + }, + "v1DashboardWorkspaceQuotaResourceAllocation": { + "description": "Workspace quota resource allocation", + "properties": { + "cpu": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memory": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + }, + "v1DashboardWorkspaceResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1DashboardWorkspaceSpec": { + "description": "Workspace spec summary", + "properties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace quota resource allocation", + "properties": { + "cpu": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memory": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + }, + "v1DashboardWorkspaceStatus": { + "description": "Workspace status", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace namespace allocation", + "properties": { + "name": { + "type": "string" + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1DashboardWorkspaces": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "cpuUnit": { + "type": "string" + }, + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace information", + "properties": { + "meta": { + "description": "Deprecated. Workspace meta data", + "properties": { + "clusterNames": { + "description": "Deprecated. Use clusterRefs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace spec summary", + "properties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace quota resource allocation", + "properties": { + "cpu": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memory": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + }, + "status": { + "description": "Workspace status", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace namespace allocation", + "properties": { + "name": { + "type": "string" + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + }, + "memoryUnit": { + "type": "string" + } + } + }, + "v1DataSinkConfig": { + "description": "Data sink", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "auditDataSinks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "cloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "cloudwatch" + ] + } + } + } + } + } + } + } + }, + "v1DataSinkSpec": { + "type": "object", + "properties": { + "auditDataSinks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "cloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "cloudwatch" + ] + } + } + } + } + } + }, + "v1DataSinkableSpec": { + "type": "object", + "properties": { + "cloudWatch": { + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "cloudwatch" + ] + } + } + }, + "v1DatabaseTransferJob": { + "description": "database transfer job details", + "type": "object", + "properties": { + "backupStatus": { + "description": "transfer job details", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folder": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + }, + "status": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string", + "enum": [ + "FileSystem", + "Ftp" + ] + } + } + }, + "v1DatabaseTransferStatus": { + "description": "database transfer status", + "type": "object", + "properties": { + "backups": { + "type": "array", + "items": { + "description": "database transfer job details", + "type": "object", + "properties": { + "backupStatus": { + "description": "transfer job details", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folder": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + }, + "status": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string", + "enum": [ + "FileSystem", + "Ftp" + ] + } + } + } + }, + "isActive": { + "type": "boolean" + } + } + }, + "v1DeletedMsg": { + "description": "Deleted response with message", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1DeveloperCredit": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + }, + "v1DeviceSpec": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "v1Disk": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + }, + "v1DomainHost": { + "description": "update domain host for application. RootDomain gets dervied from domain host url", + "type": "object", + "properties": { + "host": { + "type": "string" + } + } + }, + "v1EcrAuthorizationRequestEntity": { + "description": "Ecr registry credentials entity", + "type": "object", + "properties": { + "awsCloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "endpoint": { + "description": "Endpoint url to make the request", + "type": "string" + }, + "isPrivate": { + "description": "If it is public or private", + "type": "boolean" + }, + "region": { + "description": "Name of the region", + "type": "string" + } + } + }, + "v1EcrImageEntity": { + "type": "object", + "properties": { + "name": { + "description": "Image name", + "type": "string" + }, + "tag": { + "description": "Image tag", + "type": "string" + } + } + }, + "v1EcrImageValidateEntity": { + "description": "Ecr registry image meta", + "type": "object", + "properties": { + "authEntity": { + "description": "Ecr registry credentials entity", + "type": "object", + "properties": { + "awsCloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "endpoint": { + "description": "Endpoint url to make the request", + "type": "string" + }, + "isPrivate": { + "description": "If it is public or private", + "type": "boolean" + }, + "region": { + "description": "Name of the region", + "type": "string" + } + } + }, + "imageTag": { + "description": "Name of the image tag", + "type": "string" + }, + "images": { + "description": "Ecr Image Entity", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "description": "Image name", + "type": "string" + }, + "tag": { + "description": "Image tag", + "type": "string" + } + } + } + }, + "repoName": { + "description": "Name of the repo", + "type": "string" + } + } + }, + "v1EcrRegistry": { + "description": "Ecr registry information", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Ecr registry spec", + "type": "object", + "required": [ + "endpoint", + "isPrivate" + ], + "properties": { + "baseContentPath": { + "description": "OCI ecr registry content base path", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "type": "string", + "default": "helm", + "enum": [ + "helm", + "pack" + ] + }, + "registryUid": { + "description": "Ecr registry uid", + "type": "string" + }, + "scope": { + "type": "string" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + } + } + } + } + }, + "v1EcrRegistrySpec": { + "description": "Ecr registry spec", + "type": "object", + "required": [ + "endpoint", + "isPrivate" + ], + "properties": { + "baseContentPath": { + "description": "OCI ecr registry content base path", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "type": "string", + "default": "helm", + "enum": [ + "helm", + "pack" + ] + }, + "registryUid": { + "description": "Ecr registry uid", + "type": "string" + }, + "scope": { + "type": "string" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + } + } + }, + "v1EdgeHost": { + "description": "EdgeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "type": "string", + "format": "password", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1EdgeHostCloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "type": "object", + "properties": { + "vsphere": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1EdgeHostClusterEntity": { + "type": "object", + "properties": { + "clusterUid": { + "type": "string" + } + } + }, + "v1EdgeHostDevice": { + "properties": { + "aclmeta": { + "description": "Resource access control information (Read-only response data)", + "type": "object", + "properties": { + "ownerUid": { + "description": "User or service uid which created the resource", + "type": "string" + }, + "projectUid": { + "description": "Project's uid if the resource is under a project", + "type": "string" + }, + "tenantUid": { + "description": "Tenant's uid", + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", + "type": "object", + "properties": { + "cloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "type": "object", + "properties": { + "vsphere": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "EdgeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "type": "string", + "format": "password", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "properties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "storagePools": { + "type": "array", + "items": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "service": { + "description": "ServiceSpec defines the specification of service registering edge", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "type": { + "description": "Deprecated. Cloudtype of the provisioned edge host", + "type": "string", + "enum": [ + "libvirt", + "vsphere", + "edge-native" + ] + }, + "version": { + "type": "string" + } + } + }, + "status": { + "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "serviceAuthToken": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + } + }, + "v1EdgeHostDeviceEntity": { + "description": "Edge host device information", + "type": "object", + "properties": { + "metadata": { + "description": "Object identity meta with tags", + "type": "object", + "properties": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Edge host device spec", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + }, + "hostPairingKey": { + "type": "string", + "format": "password" + } + } + } + } + }, + "v1EdgeHostDeviceHostCheckSum": { + "type": "object", + "properties": { + "hostCheckSum": { + "type": "string" + } + } + }, + "v1EdgeHostDeviceHostPairingKey": { + "type": "object", + "properties": { + "hostPairingKey": { + "type": "string", + "format": "password" + } + } + }, + "v1EdgeHostDeviceMetaUpdateEntity": { + "description": "Edge host device uid and name", + "type": "object", + "properties": { + "metadata": { + "description": "Object identity meta with tags", + "type": "object", + "properties": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1EdgeHostDeviceSpec": { + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", + "type": "object", + "properties": { + "cloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "type": "object", + "properties": { + "vsphere": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "EdgeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "type": "string", + "format": "password", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "properties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "storagePools": { + "type": "array", + "items": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "service": { + "description": "ServiceSpec defines the specification of service registering edge", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "type": { + "description": "Deprecated. Cloudtype of the provisioned edge host", + "type": "string", + "enum": [ + "libvirt", + "vsphere", + "edge-native" + ] + }, + "version": { + "type": "string" + } + } + }, + "v1EdgeHostDeviceSpecEntity": { + "description": "Edge host device spec", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + }, + "hostPairingKey": { + "type": "string", + "format": "password" + } + } + }, + "v1EdgeHostDeviceStatus": { + "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "serviceAuthToken": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + }, + "v1EdgeHostDevices": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "aclmeta": { + "description": "Resource access control information (Read-only response data)", + "type": "object", + "properties": { + "ownerUid": { + "description": "User or service uid which created the resource", + "type": "string" + }, + "projectUid": { + "description": "Project's uid if the resource is under a project", + "type": "string" + }, + "tenantUid": { + "description": "Tenant's uid", + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", + "type": "object", + "properties": { + "cloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "type": "object", + "properties": { + "vsphere": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "EdgeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "type": "string", + "format": "password", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "properties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "storagePools": { + "type": "array", + "items": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "service": { + "description": "ServiceSpec defines the specification of service registering edge", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "type": { + "description": "Deprecated. Cloudtype of the provisioned edge host", + "type": "string", + "enum": [ + "libvirt", + "vsphere", + "edge-native" + ] + }, + "version": { + "type": "string" + } + } + }, + "status": { + "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "serviceAuthToken": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1EdgeHostHealth": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "v1EdgeHostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "v1EdgeHostMeta": { + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + }, + "edgeHostType": { + "type": "string", + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ] + }, + "healthState": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1EdgeHostNetwork": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + }, + "v1EdgeHostProperties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "storagePools": { + "type": "array", + "items": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "v1EdgeHostSSHSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + }, + "v1EdgeHostSpecHost": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "macAddress": { + "type": "string" + } + } + }, + "v1EdgeHostState": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + }, + "v1EdgeHostStoragePool": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1EdgeHostVsphereCloudProperties": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "v1EdgeHostsMeta": { + "type": "object", + "properties": { + "edgeHosts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + }, + "edgeHostType": { + "type": "string", + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ] + }, + "healthState": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1EdgeHostsMetadata": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "macAddress": { + "type": "string" + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + }, + "status": { + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + } + }, + "v1EdgeHostsMetadataFilter": { + "description": "Edge host metadata spec", + "properties": { + "filter": { + "description": "Edge hosts metadata filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "states": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "state", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1EdgeHostsMetadataFilterSpec": { + "description": "Edge hosts metadata filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "states": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + }, + "v1EdgeHostsMetadataSortFields": { + "type": "string", + "enum": [ + "name", + "state", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1EdgeHostsMetadataSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "state", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1EdgeHostsMetadataSpec": { + "type": "object", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "macAddress": { + "type": "string" + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + }, + "v1EdgeHostsMetadataStatus": { + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + }, + "v1EdgeHostsMetadataSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "macAddress": { + "type": "string" + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + }, + "status": { + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + } + } + } + } + }, + "v1EdgeHostsSearchSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "macAddress": { + "type": "string" + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + }, + "status": { + "type": "object", + "properties": { + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1EdgeHostsTags": { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1EdgeNativeCloudClusterConfigEntity": { + "description": "EdgeNative cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + } + } + }, + "v1EdgeNativeCloudConfig": { + "description": "EdgeNativeCloudConfig is the Schema for the edgenativecloudconfigs API", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeNativeCloudConfigSpec defines the desired state of EdgeNativeCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "hosts" + ], + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "hosts": { + "type": "array", + "items": { + "description": "EdgeNativeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "IsCandidateCaption": { + "description": "Is Edge host nominated as candidate", + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "caCert": { + "description": "CACert for TLS connections", + "type": "string" + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string", + "default": "" + }, + "hostName": { + "description": "Qualified name of host", + "type": "string", + "default": "" + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string", + "default": "" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated. Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated. Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osType": { + "description": "the os type for the pool, must be supported by the provider", + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "status": { + "description": "EdgeNativeCloudConfigStatus defines the observed state of EdgeNativeCloudConfig", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", + "type": "string" + } + } + } + } + }, + "v1EdgeNativeCloudConfigSpec": { + "description": "EdgeNativeCloudConfigSpec defines the desired state of EdgeNativeCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "hosts" + ], + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "hosts": { + "type": "array", + "items": { + "description": "EdgeNativeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "IsCandidateCaption": { + "description": "Is Edge host nominated as candidate", + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "caCert": { + "description": "CACert for TLS connections", + "type": "string" + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string", + "default": "" + }, + "hostName": { + "description": "Qualified name of host", + "type": "string", + "default": "" + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string", + "default": "" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated. Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated. Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osType": { + "description": "the os type for the pool, must be supported by the provider", + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1EdgeNativeCloudConfigStatus": { + "description": "EdgeNativeCloudConfigStatus defines the observed state of EdgeNativeCloudConfig", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", + "type": "string" + } + } + }, + "v1EdgeNativeClusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "v1EdgeNativeControlPlaneEndPoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "v1EdgeNativeHost": { + "description": "EdgeNativeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "IsCandidateCaption": { + "description": "Is Edge host nominated as candidate", + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "caCert": { + "description": "CACert for TLS connections", + "type": "string" + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string", + "default": "" + }, + "hostName": { + "description": "Qualified name of host", + "type": "string", + "default": "" + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string", + "default": "" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated. Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated. Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + }, + "v1EdgeNativeInstanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "v1EdgeNativeMachine": { + "description": "EdgeNative cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeNative cloud VM definition spec", + "type": "object", + "properties": { + "edgeHostUid": { + "type": "string" + }, + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1EdgeNativeMachinePoolCloudConfigEntity": { + "required": [ + "edgeHosts" + ], + "properties": { + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + } + } + }, + "v1EdgeNativeMachinePoolConfig": { + "type": "object", + "required": [ + "hosts" + ], + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "hosts": { + "type": "array", + "items": { + "description": "EdgeNativeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "IsCandidateCaption": { + "description": "Is Edge host nominated as candidate", + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "caCert": { + "description": "CACert for TLS connections", + "type": "string" + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string", + "default": "" + }, + "hostName": { + "description": "Qualified name of host", + "type": "string", + "default": "" + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string", + "default": "" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated. Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated. Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osType": { + "description": "the os type for the pool, must be supported by the provider", + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1EdgeNativeMachinePoolConfigEntity": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "edgeHosts" + ], + "properties": { + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1EdgeNativeMachinePoolHostEntity": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + }, + "v1EdgeNativeMachineSpec": { + "description": "EdgeNative cloud VM definition spec", + "type": "object", + "properties": { + "edgeHostUid": { + "type": "string" + }, + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + } + } + }, + "v1EdgeNativeMachines": { + "description": "EdgeNative machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "EdgeNative cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeNative cloud VM definition spec", + "type": "object", + "properties": { + "edgeHostUid": { + "type": "string" + }, + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1EdgeNativeNic": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1EdgeNativeOverlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1EdgeNativeTwoNodeCandidateEntity": { + "type": "object", + "properties": { + "primaryEdgeHost": { + "type": "string" + }, + "secondaryEdgeHost": { + "type": "string" + } + } + }, + "v1EdgeServiceLogin": { + "description": "System service login input", + "type": "object", + "properties": { + "authToken": { + "description": "authToken helps in two step verification for the authorization.", + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1EdgeToken": { + "description": "Edge token information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProject": { + "description": "Edge token project information", + "type": "object", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "token": { + "description": "Edge token", + "type": "string" + } + } + }, + "status": { + "description": "Edge token status", + "type": "object", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1EdgeTokenActiveState": { + "description": "Edge token active state", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean" + } + } + }, + "v1EdgeTokenEntity": { + "description": "Edge token request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1EdgeTokenProject": { + "description": "Edge token project information", + "type": "object", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + } + }, + "v1EdgeTokenSpec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProject": { + "description": "Edge token project information", + "type": "object", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "token": { + "description": "Edge token", + "type": "string" + } + } + }, + "v1EdgeTokenSpecEntity": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1EdgeTokenSpecUpdate": { + "description": "Edge token spec to be updated", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1EdgeTokenStatus": { + "description": "Edge token status", + "type": "object", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1EdgeTokenUpdate": { + "description": "Edge token update request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token spec to be updated", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1EdgeTokens": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of edge tokens", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Edge token information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProject": { + "description": "Edge token project information", + "type": "object", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "token": { + "description": "Edge token", + "type": "string" + } + } + }, + "status": { + "description": "Edge token status", + "type": "object", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1EksAddon": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + }, + "v1EksCloudClusterConfigEntity": { + "description": "EKS cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "EksClusterConfig defines EKS specific config", + "type": "object", + "required": [ + "region" + ], + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + } + } + }, + "v1EksCloudConfig": { + "description": "EksCloudConfig is the Schema for the ekscloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EksCloudConfigSpec defines the cloud configuration input by user", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "EksClusterConfig defines EKS specific config", + "type": "object", + "required": [ + "region" + ], + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "fargateProfiles": { + "type": "array", + "items": { + "description": "FargateProfile defines the desired state of FargateProfile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1EksCloudConfigSpec": { + "description": "EksCloudConfigSpec defines the cloud configuration input by user", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "EksClusterConfig defines EKS specific config", + "type": "object", + "required": [ + "region" + ], + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "fargateProfiles": { + "type": "array", + "items": { + "description": "FargateProfile defines the desired state of FargateProfile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "v1EksClusterConfig": { + "description": "EksClusterConfig defines EKS specific config", + "type": "object", + "required": [ + "region" + ], + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "v1EksClusterConfigEndpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1EksFargateProfiles": { + "description": "Fargate profiles", + "type": "object", + "properties": { + "fargateProfiles": { + "type": "array", + "items": { + "description": "FargateProfile defines the desired state of FargateProfile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1EksMachineCloudConfigEntity": { + "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "v1EksMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1EksMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1EksSubnetEntity": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, + "v1EncryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Event": { + "description": "Describes the component event details", + "type": "object", + "properties": { + "involvedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "message": { + "description": "Describes message associated with the event", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "reason": { + "description": "Describes the reason for the event", + "type": "string" + }, + "relatedObject": { + "description": "Object for which the event is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "severity": { + "description": "Describes the gravitas for the event", + "type": "string" + }, + "source": { + "description": "Describes the origin for the event", + "type": "object", + "properties": { + "component": { + "description": "Describes the component where event originated", + "type": "string" + }, + "host": { + "description": "Describes the host where event originated", + "type": "string" + } + } + } + } + }, + "v1EventRelatedObject": { + "description": "Object for which the event is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1EventSource": { + "description": "Describes the origin for the event", + "type": "object", + "properties": { + "component": { + "description": "Describes the component where event originated", + "type": "string" + }, + "host": { + "description": "Describes the host where event originated", + "type": "string" + } + } + }, + "v1Events": { + "description": "An array of component events items", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Describes a list of returned component events", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the component event details", + "type": "object", + "properties": { + "involvedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "message": { + "description": "Describes message associated with the event", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "reason": { + "description": "Describes the reason for the event", + "type": "string" + }, + "relatedObject": { + "description": "Object for which the event is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "severity": { + "description": "Describes the gravitas for the event", + "type": "string" + }, + "source": { + "description": "Describes the origin for the event", + "type": "object", + "properties": { + "component": { + "description": "Describes the component where event originated", + "type": "string" + }, + "host": { + "description": "Describes the host where event originated", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1EventsObjectsEntity": { + "type": "object", + "required": [ + "resourceType", + "resourceUid" + ], + "properties": { + "resourceType": { + "type": "string" + }, + "resourceUid": { + "type": "string" + } + } + }, + "v1EventsRelatedObjectsEntity": { + "type": "object", + "required": [ + "relatedObjectUids" + ], + "properties": { + "relatedObjectUids": { + "description": "List of uids of the related object", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1FargateProfile": { + "description": "FargateProfile defines the desired state of FargateProfile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1FargateSelector": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + }, + "v1Feature": { + "description": "Feature response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + } + } + }, + "v1FeatureFlagPing": { + "type": "object", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1FeatureSpec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + }, + "v1FeatureUpdate": { + "description": "Feature update spec", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Feature update spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + } + } + } + } + }, + "v1FeatureUpdateSpec": { + "description": "Feature update spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + } + } + }, + "v1Features": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of features", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Feature response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + } + } + } + } + } + }, + "v1FileUploadResponse": { + "description": "File upload response", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1FilterArray": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "v1FilterIntRange": { + "type": "object", + "properties": { + "eq": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "gt": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "gte": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "lt": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "lte": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "ne": { + "type": "integer", + "format": "int32", + "x-nullable": true + } + } + }, + "v1FilterMetadata": { + "description": "Filter metadata object", + "type": "object", + "properties": { + "filterType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1FilterNumberRange": { + "type": "object", + "properties": { + "eq": { + "type": "number", + "x-nullable": true + }, + "gt": { + "type": "number", + "x-nullable": true + }, + "gte": { + "type": "number", + "x-nullable": true + }, + "lt": { + "type": "number", + "x-nullable": true + }, + "lte": { + "type": "number", + "x-nullable": true + }, + "ne": { + "type": "number", + "x-nullable": true + } + } + }, + "v1FilterString": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "v1FilterSummary": { + "description": "Filter summary object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "properties": { + "filterType": { + "type": "string" + } + } + } + } + }, + "v1FilterSummarySpec": { + "properties": { + "filterType": { + "type": "string" + } + } + }, + "v1FilterVersionString": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "v1FiltersMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter metadata object", + "type": "object", + "properties": { + "filterType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1FiltersSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter summary object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "properties": { + "filterType": { + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1FipsSettings": { + "description": "FIPS configuration", + "properties": { + "fipsClusterFeatureConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "fipsClusterImportConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "fipsPackConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + } + } + }, + "v1FreemiumUsage": { + "type": "object", + "properties": { + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1FreemiumUsageLimit": { + "type": "object", + "properties": { + "activeClusters": { + "type": "integer", + "x-omitempty": false + }, + "overageUsage": { + "type": "number", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1GPUConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "v1GPUDeviceSpec": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "v1GcpAccount": { + "description": "GCP account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileName": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1GcpAccountEntity": { + "description": "GCP account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1GcpAccountEntitySpec": { + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "v1GcpAccountNameValidateSpec": { + "description": "Gcp cloud account name validate spec", + "type": "object", + "required": [ + "credentials", + "bucketName" + ], + "properties": { + "bucketName": { + "description": "Bucket name in the GCP", + "type": "string" + }, + "credentials": { + "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "projectId": { + "description": "ProjectId in the GCP", + "type": "string" + } + } + }, + "v1GcpAccountSpec": { + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileName": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "v1GcpAccountValidateSpec": { + "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "v1GcpAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "GCP account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileName": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1GcpCloudAccountValidateEntity": { + "description": "Gcp cloud account spec", + "type": "object", + "properties": { + "spec": { + "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + } + } + }, + "v1GcpCloudClusterConfigEntity": { + "description": "Gcp cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "project", + "region" + ], + "properties": { + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + } + } + } + }, + "v1GcpCloudConfig": { + "description": "GcpCloudConfig is the Schema for the gcpcloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "GcpCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "project", + "region" + ], + "properties": { + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane", + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "status": { + "description": "GcpCloudConfigStatus defines the observed state of GcpCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "images": { + "description": "Refers to GCP image", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in each pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + } + } + }, + "v1GcpCloudConfigSpec": { + "description": "GcpCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "project", + "region" + ], + "properties": { + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane", + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1GcpCloudConfigStatus": { + "description": "GcpCloudConfigStatus defines the observed state of GcpCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "images": { + "description": "Refers to GCP image", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in each pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + }, + "v1GcpClusterConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "project", + "region" + ], + "properties": { + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + } + }, + "v1GcpImage": { + "description": "Refers to GCP image", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1GcpImageUrlEntity": { + "description": "Gcp image url entity", + "type": "object", + "properties": { + "imageFamily": { + "description": "The name of the image family to which this image belongs", + "type": "string" + }, + "imageUrl": { + "description": "Server-defined URL for the resource", + "type": "string" + }, + "name": { + "description": "Name of the resource", + "type": "string" + } + } + }, + "v1GcpInstanceTypes": { + "description": "Retrieves a list of GCP instance types", + "type": "object", + "properties": { + "instanceTypes": { + "description": "List of GCP instance types", + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + } + } + }, + "v1GcpMachine": { + "description": "GCP cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "GCP cloud VM definition spec", + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "image": { + "type": "string" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "GCP network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1GcpMachinePoolCloudConfigEntity": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "v1GcpMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane", + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1GcpMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1GcpMachineSpec": { + "description": "GCP cloud VM definition spec", + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "image": { + "type": "string" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "GCP network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" + } + } + }, + "v1GcpMachines": { + "description": "GCP machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "GCP cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "GCP cloud VM definition spec", + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "image": { + "type": "string" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "GCP network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1GcpManagedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "v1GcpNetwork": { + "description": "GCP network enity is a virtual version of a physical network", + "type": "object", + "properties": { + "name": { + "description": "GCP network name", + "type": "string" + }, + "subnets": { + "description": "List of GCP subnet", + "type": "array", + "items": { + "description": "Subnets are regional resources, and have IP address ranges associated with them", + "type": "object", + "properties": { + "id": { + "description": "GCP subnet id", + "type": "string" + }, + "name": { + "description": "GCP subnet name", + "type": "string" + } + } + } + } + } + }, + "v1GcpNetworks": { + "description": "List of GCP networks", + "type": "object", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "GCP network enity is a virtual version of a physical network", + "type": "object", + "properties": { + "name": { + "description": "GCP network name", + "type": "string" + }, + "subnets": { + "description": "List of GCP subnet", + "type": "array", + "items": { + "description": "Subnets are regional resources, and have IP address ranges associated with them", + "type": "object", + "properties": { + "id": { + "description": "GCP subnet id", + "type": "string" + }, + "name": { + "description": "GCP subnet name", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1GcpNic": { + "description": "GCP network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1GcpProject": { + "description": "GCP project organizes all Google Cloud resources", + "type": "object", + "properties": { + "id": { + "description": "GCP project id", + "type": "string" + }, + "name": { + "description": "GCP project name", + "type": "string" + } + } + }, + "v1GcpProjects": { + "description": "List of GCP Projects", + "type": "object", + "properties": { + "projects": { + "description": "List of GCP Projects", + "type": "array", + "items": { + "description": "GCP project organizes all Google Cloud resources", + "type": "object", + "properties": { + "id": { + "description": "GCP project id", + "type": "string" + }, + "name": { + "description": "GCP project name", + "type": "string" + } + } + } + } + } + }, + "v1GcpRegion": { + "description": "Geographical region made up of zones where you can host your GCP resources", + "type": "object", + "properties": { + "name": { + "description": "GCP region name", + "type": "string" + }, + "status": { + "description": "GCP region status", + "type": "string" + } + } + }, + "v1GcpRegions": { + "description": "List of GCP Regions", + "type": "object", + "properties": { + "regions": { + "type": "array", + "items": { + "description": "Geographical region made up of zones where you can host your GCP resources", + "type": "object", + "properties": { + "name": { + "description": "GCP region name", + "type": "string" + }, + "status": { + "description": "GCP region status", + "type": "string" + } + } + } + } + } + }, + "v1GcpStorageConfig": { + "description": "GCP storage config object", + "type": "object", + "required": [ + "bucketName", + "credentials" + ], + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + } + }, + "v1GcpStorageTypes": { + "description": "List of GCP storage types", + "type": "object", + "properties": { + "storageTypes": { + "type": "array", + "items": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1GcpSubnet": { + "description": "Subnets are regional resources, and have IP address ranges associated with them", + "type": "object", + "properties": { + "id": { + "description": "GCP subnet id", + "type": "string" + }, + "name": { + "description": "GCP subnet name", + "type": "string" + } + } + }, + "v1GcpSubnetEntity": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, + "v1GcpZone": { + "description": "A zone is a deployment area for Google Cloud resources within a region", + "type": "object", + "properties": { + "name": { + "description": "GCP zone name", + "type": "string" + } + } + }, + "v1GcpZones": { + "description": "List of GCP zones", + "type": "object", + "properties": { + "zones": { + "type": "array", + "items": { + "description": "A zone is a deployment area for Google Cloud resources within a region", + "type": "object", + "properties": { + "name": { + "description": "GCP zone name", + "type": "string" + } + } + } + } + } + }, + "v1GenericCloudClusterConfigEntity": { + "description": "Generic cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + } + } + }, + "v1GenericCloudConfig": { + "description": "Generic CloudConfig for all cloud types", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Generic CloudConfig spec for all cloud types", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "edgeHostRefs": { + "description": "Appliances (Edge Host) uids", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + } + } + }, + "v1GenericCloudConfigSpec": { + "description": "Generic CloudConfig spec for all cloud types", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "edgeHostRefs": { + "description": "Appliances (Edge Host) uids", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1GenericClusterConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "v1GenericInstanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "v1GenericMachine": { + "description": "Generic cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Generic cloud VM definition spec", + "properties": { + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1GenericMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1GenericMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1GenericMachineSpec": { + "description": "Generic cloud VM definition spec", + "properties": { + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "v1GenericMachines": { + "description": "Generic machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Generic cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Generic cloud VM definition spec", + "properties": { + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1GenericNic": { + "description": "Generic network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1GeolocationLatlong": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1GitRepoFileContent": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" + } + } + }, + "v1GrpcClientMonitoringData": { + "type": "object", + "properties": { + "clientUid": { + "type": "string" + }, + "receivedBroadcastCount": { + "type": "integer" + }, + "receivedPublishedCount": { + "type": "integer" + }, + "sentBroadcastCount": { + "type": "integer" + }, + "sentPublishedCount": { + "type": "integer" + }, + "subjects": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1GrpcConfiguration": { + "description": "Describes the response that contains the grpc configuration to establish connection", + "type": "object", + "properties": { + "preferredServer": { + "type": "object", + "properties": { + "endpoint": { + "description": "Describes the URL where the client has to connect to the grpc server", + "type": "string" + }, + "tls": { + "description": "Describes the Grpc tls config which client will use to make a request to the grpc server", + "type": "object", + "properties": { + "caCert": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + } + } + }, + "servers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "endpoint": { + "description": "Describes the URL where the client has to connect to the grpc server", + "type": "string" + }, + "tls": { + "description": "Describes the Grpc tls config which client will use to make a request to the grpc server", + "type": "object", + "properties": { + "caCert": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "v1GrpcEndpoint": { + "type": "object", + "properties": { + "endpoint": { + "description": "Describes the URL where the client has to connect to the grpc server", + "type": "string" + }, + "tls": { + "description": "Describes the Grpc tls config which client will use to make a request to the grpc server", + "type": "object", + "properties": { + "caCert": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + } + } + }, + "v1GrpcServerMonitoringData": { + "type": "object", + "properties": { + "clients": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "clientUid": { + "type": "string" + }, + "receivedBroadcastCount": { + "type": "integer" + }, + "receivedPublishedCount": { + "type": "integer" + }, + "sentBroadcastCount": { + "type": "integer" + }, + "sentPublishedCount": { + "type": "integer" + }, + "subjects": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "isError": { + "type": "boolean" + }, + "messageLogs": { + "type": "array", + "items": { + "type": "string" + } + }, + "subjects": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "broadcastCount": { + "type": "integer" + }, + "clients": { + "type": "array", + "items": { + "type": "string" + } + }, + "publishedCount": { + "type": "integer" + }, + "subject": { + "type": "string" + } + } + } + }, + "totalClients": { + "type": "integer" + }, + "totalSubjects": { + "type": "integer" + } + } + }, + "v1GrpcServersMonitoringData": { + "type": "object", + "properties": { + "servers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "clients": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "clientUid": { + "type": "string" + }, + "receivedBroadcastCount": { + "type": "integer" + }, + "receivedPublishedCount": { + "type": "integer" + }, + "sentBroadcastCount": { + "type": "integer" + }, + "sentPublishedCount": { + "type": "integer" + }, + "subjects": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "isError": { + "type": "boolean" + }, + "messageLogs": { + "type": "array", + "items": { + "type": "string" + } + }, + "subjects": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "broadcastCount": { + "type": "integer" + }, + "clients": { + "type": "array", + "items": { + "type": "string" + } + }, + "publishedCount": { + "type": "integer" + }, + "subject": { + "type": "string" + } + } + } + }, + "totalClients": { + "type": "integer" + }, + "totalSubjects": { + "type": "integer" + } + } + } + } + } + }, + "v1GrpcSubjectMonitoringData": { + "type": "object", + "properties": { + "broadcastCount": { + "type": "integer" + }, + "clients": { + "type": "array", + "items": { + "type": "string" + } + }, + "publishedCount": { + "type": "integer" + }, + "subject": { + "type": "string" + } + } + }, + "v1HealthCheck": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1HealthLocks": { + "type": "object", + "properties": { + "expiredLocks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "expireAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1HealthPing": { + "type": "object", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1HelmChartOption": { + "description": "If chart options are provided then the specified chart is validated first and synced immediately. If the specified chart is not found in the specified registry then creation is cancelled.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1HelmRegistries": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Helm registry information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Helm registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "registryUid": { + "description": "Helm registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Status of the helm registry", + "type": "object", + "properties": { + "helmSyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1HelmRegistriesSummary": { + "description": "Helm Registries Summary", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Helm Registry summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Helm Registry spec summary", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Helm registry status summary", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1HelmRegistry": { + "description": "Helm registry information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Helm registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "registryUid": { + "description": "Helm registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Status of the helm registry", + "type": "object", + "properties": { + "helmSyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "v1HelmRegistryCreateOption": { + "description": "Helm registry create options", + "type": "object", + "properties": { + "charts": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "If chart options are provided then the specified chart is validated first and synced immediately. If the specified chart is not found in the specified registry then creation is cancelled.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "skipSync": { + "type": "boolean" + } + } + }, + "v1HelmRegistryEntity": { + "description": "Helm registry information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Helm registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "createOption": { + "description": "Helm registry create options", + "type": "object", + "properties": { + "charts": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "If chart options are provided then the specified chart is validated first and synced immediately. If the specified chart is not found in the specified registry then creation is cancelled.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "skipSync": { + "type": "boolean" + } + } + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + } + } + }, + "v1HelmRegistrySpec": { + "description": "Helm registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "registryUid": { + "description": "Helm registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1HelmRegistrySpecEntity": { + "description": "Helm registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "createOption": { + "description": "Helm registry create options", + "type": "object", + "properties": { + "charts": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "If chart options are provided then the specified chart is validated first and synced immediately. If the specified chart is not found in the specified registry then creation is cancelled.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "skipSync": { + "type": "boolean" + } + } + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1HelmRegistrySpecSummary": { + "description": "Helm Registry spec summary", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + } + }, + "v1HelmRegistryStatus": { + "description": "Status of the helm registry", + "type": "object", + "properties": { + "helmSyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + }, + "v1HelmRegistryStatusSummary": { + "description": "Helm registry status summary", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + }, + "v1HelmRegistrySummary": { + "description": "Helm Registry summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Helm Registry spec summary", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Helm registry status summary", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "v1HostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "v1HostClusterConfigEntity": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + } + } + }, + "v1HostClusterConfigResponse": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + }, + "v1HostClusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "v1HostClusterEndpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "v1HttpPatch": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + }, + "v1HubbleInfo": { + "type": "object", + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiPort": { + "type": "string" + }, + "natsEndpoint": { + "type": "string" + }, + "uiEndpoint": { + "type": "string" + }, + "uiPort": { + "type": "string" + } + } + }, + "v1IPPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "v1IdentityProvider": { + "description": "Describes a predefined Identity Provider (IDP)", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1IdentityProviders": { + "description": "Describes a list of predefined Identity Provider (IDP)", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes a predefined Identity Provider (IDP)", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "v1ImportClusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + }, + "v1ImportEdgeHostConfig": { + "type": "object", + "properties": { + "edgeHostUid": { + "description": "Deprecated. Use 'edgeHostUids' field", + "type": "string" + }, + "edgeHostUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1InfraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "v1IngressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "v1InstallerStatus": { + "description": "Spectro cluster installer status", + "type": "object", + "properties": { + "clusterMigration": { + "description": "Spectro cluster migration status", + "type": "object", + "properties": { + "database": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "tenant": { + "description": "Spectro tenant migration status", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "clusterState": { + "type": "string" + }, + "endpoint": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1InstanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "v1InstanceCost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "v1InstancePrice": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + }, + "v1InstanceType": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + }, + "v1Invoice": { + "description": "Invoice object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Invoice specification", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "billingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "credits": { + "description": "Invoice credits object", + "properties": { + "alloyFreeCredits": { + "description": "Credits allocated for import clusters", + "type": "number", + "format": "int64" + }, + "pureFreeCredits": { + "description": "Credits allocated for managed clusters", + "type": "number", + "format": "int64" + } + } + }, + "envType": { + "description": "Environment type [Trial,MonthlyOnDemand,AnnualSubscription,OnPrem]", + "type": "string" + }, + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "paymentUnit": { + "type": "string", + "enum": [ + "usd" + ] + }, + "plan": { + "description": "Invoice plan object", + "properties": { + "freeCredits": { + "description": "List of free credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + }, + "plantype": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "slaCredits": { + "description": "List of SLA credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + } + } + } + } + }, + "status": { + "description": "Invoice Status", + "properties": { + "billableAmount": { + "description": "Total billable amount", + "type": "number", + "format": "float64" + }, + "productInvoice": { + "description": "Product invoice object", + "properties": { + "alloy": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "projects": { + "description": "List of project invoices", + "type": "array", + "items": { + "description": "Invoice project object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "projectName": { + "description": "Name of the project", + "type": "string" + }, + "projectUid": { + "description": "Project identifier", + "type": "string" + }, + "usage": { + "description": "Project usage object", + "properties": { + "alloy": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + } + }, + "states": { + "description": "List of invoice states", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Invoice state object", + "properties": { + "paymentMsg": { + "description": "Payment status message", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Paid", + "PaymentPending", + "PaymentInProgress", + "PaymentFailed" + ] + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "stripeInvoiceId": { + "description": "Stripe invoice uid", + "type": "string" + } + } + } + } + }, + "v1InvoiceBillingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1InvoiceCredits": { + "description": "Invoice credits object", + "properties": { + "alloyFreeCredits": { + "description": "Credits allocated for import clusters", + "type": "number", + "format": "int64" + }, + "pureFreeCredits": { + "description": "Credits allocated for managed clusters", + "type": "number", + "format": "int64" + } + } + }, + "v1InvoicePlan": { + "description": "Invoice plan object", + "properties": { + "freeCredits": { + "description": "List of free credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + }, + "plantype": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "slaCredits": { + "description": "List of SLA credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + } + } + }, + "v1InvoicePlanCredit": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + }, + "v1InvoiceProduct": { + "description": "Product invoice object", + "properties": { + "alloy": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "v1InvoiceProductData": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "v1InvoiceProject": { + "description": "Invoice project object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "projectName": { + "description": "Name of the project", + "type": "string" + }, + "projectUid": { + "description": "Project identifier", + "type": "string" + }, + "usage": { + "description": "Project usage object", + "properties": { + "alloy": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + }, + "v1InvoiceRetryRequest": { + "description": "Retry invoice request object", + "properties": { + "customerId": { + "description": "Customer invoice uid", + "type": "string" + }, + "invoiceUid": { + "description": "Invoice uid", + "type": "string" + }, + "paymentMethodId": { + "description": "Payment method uid", + "type": "string" + } + } + }, + "v1InvoiceSpec": { + "description": "Invoice specification", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "billingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "credits": { + "description": "Invoice credits object", + "properties": { + "alloyFreeCredits": { + "description": "Credits allocated for import clusters", + "type": "number", + "format": "int64" + }, + "pureFreeCredits": { + "description": "Credits allocated for managed clusters", + "type": "number", + "format": "int64" + } + } + }, + "envType": { + "description": "Environment type [Trial,MonthlyOnDemand,AnnualSubscription,OnPrem]", + "type": "string" + }, + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "paymentUnit": { + "type": "string", + "enum": [ + "usd" + ] + }, + "plan": { + "description": "Invoice plan object", + "properties": { + "freeCredits": { + "description": "List of free credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + }, + "plantype": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "slaCredits": { + "description": "List of SLA credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + } + } + } + } + }, + "v1InvoiceState": { + "description": "Invoice state object", + "properties": { + "paymentMsg": { + "description": "Payment status message", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Paid", + "PaymentPending", + "PaymentInProgress", + "PaymentFailed" + ] + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1InvoiceStatus": { + "description": "Invoice Status", + "properties": { + "billableAmount": { + "description": "Total billable amount", + "type": "number", + "format": "float64" + }, + "productInvoice": { + "description": "Product invoice object", + "properties": { + "alloy": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "projects": { + "description": "List of project invoices", + "type": "array", + "items": { + "description": "Invoice project object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "projectName": { + "description": "Name of the project", + "type": "string" + }, + "projectUid": { + "description": "Project identifier", + "type": "string" + }, + "usage": { + "description": "Project usage object", + "properties": { + "alloy": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + } + }, + "states": { + "description": "List of invoice states", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Invoice state object", + "properties": { + "paymentMsg": { + "description": "Payment status message", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Paid", + "PaymentPending", + "PaymentInProgress", + "PaymentFailed" + ] + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "stripeInvoiceId": { + "description": "Stripe invoice uid", + "type": "string" + } + } + }, + "v1Invoices": { + "description": "List of invoices", + "type": "object", + "required": [ + "invoices" + ], + "properties": { + "invoices": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Invoice object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Invoice specification", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "billingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "credits": { + "description": "Invoice credits object", + "properties": { + "alloyFreeCredits": { + "description": "Credits allocated for import clusters", + "type": "number", + "format": "int64" + }, + "pureFreeCredits": { + "description": "Credits allocated for managed clusters", + "type": "number", + "format": "int64" + } + } + }, + "envType": { + "description": "Environment type [Trial,MonthlyOnDemand,AnnualSubscription,OnPrem]", + "type": "string" + }, + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "paymentUnit": { + "type": "string", + "enum": [ + "usd" + ] + }, + "plan": { + "description": "Invoice plan object", + "properties": { + "freeCredits": { + "description": "List of free credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + }, + "plantype": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "slaCredits": { + "description": "List of SLA credits", + "type": "array", + "items": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "type": "number", + "format": "int64" + } + } + } + } + } + } + } + }, + "status": { + "description": "Invoice Status", + "properties": { + "billableAmount": { + "description": "Total billable amount", + "type": "number", + "format": "float64" + }, + "productInvoice": { + "description": "Product invoice object", + "properties": { + "alloy": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "amount": { + "description": "Total amount", + "type": "number", + "format": "float64" + }, + "billableCredits": { + "description": "Credits to be billed", + "type": "number", + "format": "float64" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "type": "number", + "format": "float64" + }, + "discount": { + "description": "Applied discount", + "type": "number", + "format": "int64" + }, + "freeCredits": { + "description": "Allocated free credits", + "type": "number", + "format": "int64" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "type": "number", + "format": "int8" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "type": "number", + "format": "float64" + }, + "totalUsedCredits": { + "description": "Total used credits", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "projects": { + "description": "List of project invoices", + "type": "array", + "items": { + "description": "Invoice project object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "projectName": { + "description": "Name of the project", + "type": "string" + }, + "projectUid": { + "description": "Project identifier", + "type": "string" + }, + "usage": { + "description": "Project usage object", + "properties": { + "alloy": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + } + }, + "states": { + "description": "List of invoice states", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Invoice state object", + "properties": { + "paymentMsg": { + "description": "Payment status message", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Paid", + "PaymentPending", + "PaymentInProgress", + "PaymentFailed" + ] + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "stripeInvoiceId": { + "description": "Stripe invoice uid", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1IpPoolEntity": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + } + }, + "status": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1IpPoolInputEntity": { + "description": "IP Pool input entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "pool" + ], + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean" + } + } + } + } + }, + "v1IpPoolStatus": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1IpPools": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + } + }, + "status": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1JWKResponse": { + "type": "object", + "properties": { + "alg": { + "description": "The \"alg\" (algorithm) parameter identifies the algorithm intended for use with the key", + "type": "string" + }, + "e": { + "type": "string" + }, + "key_ops": { + "description": "The \"key_ops\" (key operations) parameter identifies the operation(s) for which the key is intended to be used", + "type": "string" + }, + "kid": { + "description": "The \"kid\" (key ID) parameter is used to match a specific key", + "type": "string" + }, + "kty": { + "description": "The \"kty\" (key type) parameter identifies the cryptographic algorithm family used with the key, such as \"RSA\" or \"EC\"", + "type": "string" + }, + "n": { + "type": "string" + }, + "use": { + "description": "The \"use\" (public key use) parameter identifies the intended use of the public key", + "type": "string" + } + } + }, + "v1JWKSetResponse": { + "type": "object", + "properties": { + "keys": { + "description": "The value of the \"keys\" parameter is an array of JWK values", + "type": "array", + "items": { + "type": "object", + "properties": { + "alg": { + "description": "The \"alg\" (algorithm) parameter identifies the algorithm intended for use with the key", + "type": "string" + }, + "e": { + "type": "string" + }, + "key_ops": { + "description": "The \"key_ops\" (key operations) parameter identifies the operation(s) for which the key is intended to be used", + "type": "string" + }, + "kid": { + "description": "The \"kid\" (key ID) parameter is used to match a specific key", + "type": "string" + }, + "kty": { + "description": "The \"kty\" (key type) parameter identifies the cryptographic algorithm family used with the key, such as \"RSA\" or \"EC\"", + "type": "string" + }, + "n": { + "type": "string" + }, + "use": { + "description": "The \"use\" (public key use) parameter identifies the intended use of the public key", + "type": "string" + } + } + } + } + } + }, + "v1JetAuthKey": { + "type": "object", + "properties": { + "authKey": { + "type": "string" + } + } + }, + "v1JetAuthKeyResponse": { + "type": "object", + "properties": { + "authKey": { + "type": "string" + } + } + }, + "v1JetServiceLogin": { + "description": "jet service login input", + "type": "object", + "properties": { + "authKey": { + "description": "authToken helps in two step verification for the authorization.", + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "hostClusterUid": { + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "jetUid": { + "type": "string" + }, + "overlordUid": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1K8MachineCertificate": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "K8 Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + }, + "v1KubeBenchEntity": { + "description": "KubeBench response", + "required": [ + "requestUid", + "status", + "reports" + ], + "properties": { + "reports": { + "type": "object", + "additionalProperties": { + "description": "KubeBench report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "KubeBench log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + }, + "v1KubeBenchLog": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1KubeBenchLogEntity": { + "description": "KubeBench log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1KubeBenchReport": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + }, + "v1KubeBenchReportEntity": { + "description": "KubeBench report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "info": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "KubeBench log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "warn": { + "type": "integer", + "format": "int32" + } + } + }, + "v1KubeHunterEntity": { + "description": "KubeHunter response", + "required": [ + "requestUid", + "status", + "reports" + ], + "properties": { + "reports": { + "type": "object", + "additionalProperties": { + "description": "KubeHunter report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "KubeHunter log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "description": "KubeHunter vulnerability data", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + }, + "v1KubeHunterLog": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1KubeHunterLogEntity": { + "description": "KubeHunter log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1KubeHunterReport": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilites": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1KubeHunterReportEntity": { + "description": "KubeHunter report", + "properties": { + "logs": { + "type": "array", + "items": { + "description": "KubeHunter log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "description": "KubeHunter vulnerability data", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1KubeHunterVulnerabilities": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + }, + "v1KubeHunterVulnerabilityDataEntity": { + "description": "KubeHunter vulnerability data", + "properties": { + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + } + } + }, + "v1KubeMeta": { + "description": "Spectro cluster kube meta", + "type": "object", + "properties": { + "hasKubeConfig": { + "type": "boolean", + "x-omitempty": false + }, + "hasKubeConfigClient": { + "type": "boolean", + "x-omitempty": false + }, + "hasManifest": { + "type": "boolean", + "x-omitempty": false + }, + "kubernetesVersion": { + "type": "string" + } + } + }, + "v1LibvirtCloudClusterConfigEntity": { + "description": "Libvirt cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + } + } + }, + "v1LibvirtCloudConfig": { + "description": "LibvirtCloudConfig is the Schema for the libvirtcloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "LibvirtCloudConfigSpec defines the desired state of LibvirtCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements defines the configurations of the failureDomains(hosts) for the machine pool", + "type": "array", + "items": { + "type": "object", + "required": [ + "hostUid", + "hostAddress", + "networks", + "sourceStoragePool" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "gpuDevices": { + "description": "GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the LibvirtHost", + "type": "string" + }, + "hostIdentity": { + "type": "object", + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostUid": { + "description": "HostUid is the ID of the LibvirtHost", + "type": "string" + }, + "networks": { + "description": "Networks defines the network specifications of the vms in the machine pool", + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "description": "SourceStoragePool is the storage pool for the vm image", + "type": "string" + }, + "targetStoragePool": { + "description": "TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool", + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GB", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + } + } + } + }, + "status": { + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "nodeImages": { + "description": "NodeImages are the list of images generated on all the LibvirtHosts", + "type": "array", + "items": { + "description": "LibvirtImage is the Image generated on the LibvirtHost", + "type": "object", + "properties": { + "hostID": { + "description": "HostID is the ID of the LibvirtHost", + "type": "string" + }, + "imageName": { + "description": "ImageName is the name of the Libvirt image", + "type": "string" + }, + "storagePool": { + "description": "StoragePool is the name of the storagePool where is image is located", + "type": "string" + } + } + } + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", + "type": "string" + } + } + } + } + }, + "v1LibvirtCloudConfigSpec": { + "description": "LibvirtCloudConfigSpec defines the desired state of LibvirtCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements defines the configurations of the failureDomains(hosts) for the machine pool", + "type": "array", + "items": { + "type": "object", + "required": [ + "hostUid", + "hostAddress", + "networks", + "sourceStoragePool" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "gpuDevices": { + "description": "GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the LibvirtHost", + "type": "string" + }, + "hostIdentity": { + "type": "object", + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostUid": { + "description": "HostUid is the ID of the LibvirtHost", + "type": "string" + }, + "networks": { + "description": "Networks defines the network specifications of the vms in the machine pool", + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "description": "SourceStoragePool is the storage pool for the vm image", + "type": "string" + }, + "targetStoragePool": { + "description": "TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool", + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GB", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + } + } + } + }, + "v1LibvirtCloudConfigStatus": { + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "nodeImages": { + "description": "NodeImages are the list of images generated on all the LibvirtHosts", + "type": "array", + "items": { + "description": "LibvirtImage is the Image generated on the LibvirtHost", + "type": "object", + "properties": { + "hostID": { + "description": "HostID is the ID of the LibvirtHost", + "type": "string" + }, + "imageName": { + "description": "ImageName is the name of the Libvirt image", + "type": "string" + }, + "storagePool": { + "description": "StoragePool is the name of the storagePool where is image is located", + "type": "string" + } + } + } + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", + "type": "string" + } + } + }, + "v1LibvirtClusterConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "v1LibvirtControlPlaneEndPoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "v1LibvirtDiskSpec": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + }, + "v1LibvirtHostIdentity": { + "type": "object", + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "v1LibvirtImage": { + "description": "LibvirtImage is the Image generated on the LibvirtHost", + "type": "object", + "properties": { + "hostID": { + "description": "HostID is the ID of the LibvirtHost", + "type": "string" + }, + "imageName": { + "description": "ImageName is the name of the Libvirt image", + "type": "string" + }, + "storagePool": { + "description": "StoragePool is the name of the storagePool where is image is located", + "type": "string" + } + } + }, + "v1LibvirtInstanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "v1LibvirtMachine": { + "description": "Libvirt cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "libvirt cloud VM definition spec", + "type": "object", + "properties": { + "disks": { + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "edgeHostUid": { + "type": "string" + }, + "failureDomain": { + "type": "string" + }, + "imageName": { + "type": "string" + }, + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Libvirt network interface", + "type": "object", + "required": [ + "macAddress" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "targetStoragePool": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1LibvirtMachinePoolCloudConfigEntity": { + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Libvirt placement config", + "type": "object", + "required": [ + "hostUid" + ], + "properties": { + "dataStoragePool": { + "type": "string" + }, + "gpuDevices": { + "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostUid": { + "type": "string" + }, + "networks": { + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "type": "string" + }, + "targetStoragePool": { + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "type": "integer", + "format": "int32" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + }, + "v1LibvirtMachinePoolConfig": { + "type": "object", + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements defines the configurations of the failureDomains(hosts) for the machine pool", + "type": "array", + "items": { + "type": "object", + "required": [ + "hostUid", + "hostAddress", + "networks", + "sourceStoragePool" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "gpuDevices": { + "description": "GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the LibvirtHost", + "type": "string" + }, + "hostIdentity": { + "type": "object", + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostUid": { + "description": "HostUid is the ID of the LibvirtHost", + "type": "string" + }, + "networks": { + "description": "Networks defines the network specifications of the vms in the machine pool", + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "description": "SourceStoragePool is the storage pool for the vm image", + "type": "string" + }, + "targetStoragePool": { + "description": "TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool", + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GB", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + }, + "v1LibvirtMachinePoolConfigEntity": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Libvirt placement config", + "type": "object", + "required": [ + "hostUid" + ], + "properties": { + "dataStoragePool": { + "type": "string" + }, + "gpuDevices": { + "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostUid": { + "type": "string" + }, + "networks": { + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "type": "string" + }, + "targetStoragePool": { + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "type": "integer", + "format": "int32" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1LibvirtMachineSpec": { + "description": "libvirt cloud VM definition spec", + "type": "object", + "properties": { + "disks": { + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "edgeHostUid": { + "type": "string" + }, + "failureDomain": { + "type": "string" + }, + "imageName": { + "type": "string" + }, + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Libvirt network interface", + "type": "object", + "required": [ + "macAddress" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "targetStoragePool": { + "type": "string" + } + } + }, + "v1LibvirtMachines": { + "description": "Libvirt machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Libvirt cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "libvirt cloud VM definition spec", + "type": "object", + "properties": { + "disks": { + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "edgeHostUid": { + "type": "string" + }, + "failureDomain": { + "type": "string" + }, + "imageName": { + "type": "string" + }, + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "Libvirt network interface", + "type": "object", + "required": [ + "macAddress" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "targetStoragePool": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1LibvirtNetworkSpec": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + }, + "v1LibvirtNicSpec": { + "description": "Libvirt network interface", + "type": "object", + "required": [ + "macAddress" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1LibvirtPlacementConfig": { + "type": "object", + "required": [ + "hostUid", + "hostAddress", + "networks", + "sourceStoragePool" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "gpuDevices": { + "description": "GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the LibvirtHost", + "type": "string" + }, + "hostIdentity": { + "type": "object", + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "type": "object", + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + } + } + } + }, + "hostUid": { + "description": "HostUid is the ID of the LibvirtHost", + "type": "string" + }, + "networks": { + "description": "Networks defines the network specifications of the vms in the machine pool", + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "description": "SourceStoragePool is the storage pool for the vm image", + "type": "string" + }, + "targetStoragePool": { + "description": "TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool", + "type": "string" + } + } + }, + "v1LibvirtPlacementEntity": { + "description": "Libvirt placement config", + "type": "object", + "required": [ + "hostUid" + ], + "properties": { + "dataStoragePool": { + "type": "string" + }, + "gpuDevices": { + "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostUid": { + "type": "string" + }, + "networks": { + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "type": "string" + }, + "targetStoragePool": { + "type": "string" + } + } + }, + "v1LifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "v1LifecycleConfigEntity": { + "type": "object", + "properties": { + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + } + } + }, + "v1LifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "v1ListMetaData": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + }, + "v1LoadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1LoadBalancerService": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + }, + "v1LoadBalancerSpec": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + }, + "v1LocationType": { + "description": "Location type", + "type": "string", + "default": "s3", + "enum": [ + "s3", + "gcp", + "minio" + ] + }, + "v1Lock": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "expireAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1Locks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "expireAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + }, + "v1Login": { + "description": "Login input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + } + } + }, + "v1LoginBannerSettings": { + "properties": { + "Message": { + "description": "Login banner message displayed to the user", + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "description": "Set to 'true' if login banner has to be displayed for user", + "type": "boolean", + "x-omitempty": false + }, + "title": { + "description": "Banner title displayed to the user", + "type": "string", + "x-omitempty": false + } + } + }, + "v1LoginResponse": { + "description": "Returns the allowed login method and information with the organization details", + "type": "object", + "properties": { + "appEnv": { + "description": "Describes the env type. Possible values [ saas, self-hosted, quick-start, enterprise, airgap]", + "type": "string" + }, + "authType": { + "description": "Describes the default mode of authentication. Possible values [password, sso]", + "type": "string", + "enum": [ + "password", + "sso" + ] + }, + "orgName": { + "description": "Organization name.", + "type": "string" + }, + "redirectUrl": { + "description": "Describes the default redirect Url for authentication. If authType is sso, it will have tenant configured saml/oidc idp url else it will be users organization url", + "type": "string", + "x-omitempty": false + }, + "rootDomain": { + "description": "Describes the domain url on which the saas is available", + "type": "string" + }, + "securityMode": { + "description": "Describes which security mode is enabled", + "type": "string" + }, + "ssoLogins": { + "description": "Describes the allowed sso logins", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the allowed sso login details", + "type": "object", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + } + } + }, + "totalTenants": { + "description": "Describes the total number of tenant present in the system", + "type": "number", + "format": "int64" + } + } + }, + "v1LogoutResponse": { + "description": "Logout response specifying the redirect url", + "type": "object", + "properties": { + "redirectUrl": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1MaasAccount": { + "description": "Maas cloud account information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1MaasAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas cloud account information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1MaasCloudAccount": { + "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } + } + } + }, + "v1MaasCloudClusterConfigEntity": { + "description": "Maas cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "v1MaasCloudConfig": { + "description": "MaasCloudConfig is the Schema for the maascloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "MaasCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "status": { + "description": "MaasCloudConfigStatus defines the observed state of MaasCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "nodeImage": { + "description": "Name of the image", + "type": "object", + "properties": { + "name": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + } + } + }, + "v1MaasCloudConfigSpec": { + "description": "MaasCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1MaasCloudConfigStatus": { + "description": "MaasCloudConfigStatus defines the observed state of MaasCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "nodeImage": { + "description": "Name of the image", + "type": "object", + "properties": { + "name": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + }, + "v1MaasClusterConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1MaasDomain": { + "description": "Maas domain", + "type": "object", + "properties": { + "name": { + "description": "Name of Maas domain", + "type": "string" + } + } + }, + "v1MaasDomains": { + "description": "List of Maas domains", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas domain", + "type": "object", + "properties": { + "name": { + "description": "Name of Maas domain", + "type": "string" + } + } + } + } + } + }, + "v1MaasImage": { + "description": "Name of the image", + "type": "object", + "properties": { + "name": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1MaasInstanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "v1MaasMachine": { + "description": "Maas cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Maas cloud VM definition spec", + "type": "object", + "properties": { + "az": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "Maas network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1MaasMachineConfigEntity": { + "type": "object", + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "resourcePool": { + "type": "string" + } + } + }, + "v1MaasMachinePoolCloudConfigEntity": { + "type": "object", + "required": [ + "instanceType", + "resourcePool" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "resourcePool": { + "description": "the resource pool", + "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1MaasMachinePoolConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1MaasMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType", + "resourcePool" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "resourcePool": { + "description": "the resource pool", + "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1MaasMachineSpec": { + "description": "Maas cloud VM definition spec", + "type": "object", + "properties": { + "az": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "Maas network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + } + } + }, + "v1MaasMachines": { + "description": "List of MAAS machines", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Maas cloud VM definition spec", + "type": "object", + "properties": { + "az": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "Maas network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1MaasNic": { + "description": "Maas network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1MaasPool": { + "description": "Maas pool", + "type": "object", + "properties": { + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas pool", + "type": "string" + } + } + }, + "v1MaasPools": { + "description": "List of Maas pools", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas pool", + "type": "object", + "properties": { + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas pool", + "type": "string" + } + } + } + } + } + }, + "v1MaasSubnet": { + "description": "Maas subnet", + "type": "object", + "properties": { + "id": { + "description": "Id of Maas subnet", + "type": "integer" + }, + "name": { + "description": "Name of Maas subnet", + "type": "string" + }, + "space": { + "description": "Space associated with Maas subnet", + "type": "string" + }, + "vlans": { + "description": "Maas vlan entity", + "type": "object", + "properties": { + "fabric": { + "description": "Fabric associated with Maas Vlan", + "type": "string" + }, + "id": { + "description": "Id of Maas Vlan", + "type": "integer" + }, + "name": { + "description": "Name of Maas Vlan", + "type": "string" + } + } + } + } + }, + "v1MaasSubnets": { + "description": "List of Maas subnets", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas subnet", + "type": "object", + "properties": { + "id": { + "description": "Id of Maas subnet", + "type": "integer" + }, + "name": { + "description": "Name of Maas subnet", + "type": "string" + }, + "space": { + "description": "Space associated with Maas subnet", + "type": "string" + }, + "vlans": { + "description": "Maas vlan entity", + "type": "object", + "properties": { + "fabric": { + "description": "Fabric associated with Maas Vlan", + "type": "string" + }, + "id": { + "description": "Id of Maas Vlan", + "type": "integer" + }, + "name": { + "description": "Name of Maas Vlan", + "type": "string" + } + } + } + } + } + } + } + }, + "v1MaasTag": { + "description": "Maas tag", + "type": "object", + "properties": { + "comment": { + "description": "Comment on Maas tag", + "type": "string" + }, + "definition": { + "description": "Definition of Maas tag", + "type": "string" + }, + "kernelOpts": { + "description": "Kernel Opts on Maas tag", + "type": "string" + }, + "name": { + "description": "Name of Maas tag", + "type": "string" + }, + "resourceUri": { + "description": "Description of Maas tag", + "type": "string" + } + } + }, + "v1MaasTags": { + "description": "List of Maas tags", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas tag", + "type": "object", + "properties": { + "comment": { + "description": "Comment on Maas tag", + "type": "string" + }, + "definition": { + "description": "Definition of Maas tag", + "type": "string" + }, + "kernelOpts": { + "description": "Kernel Opts on Maas tag", + "type": "string" + }, + "name": { + "description": "Name of Maas tag", + "type": "string" + }, + "resourceUri": { + "description": "Description of Maas tag", + "type": "string" + } + } + } + } + } + }, + "v1MaasVlan": { + "description": "Maas vlan entity", + "type": "object", + "properties": { + "fabric": { + "description": "Fabric associated with Maas Vlan", + "type": "string" + }, + "id": { + "description": "Id of Maas Vlan", + "type": "integer" + }, + "name": { + "description": "Name of Maas Vlan", + "type": "string" + } + } + }, + "v1MaasZone": { + "description": "Maas zone", + "type": "object", + "properties": { + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas zone", + "type": "string" + } + } + }, + "v1MaasZones": { + "description": "List of Maas zones", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Maas zone", + "type": "object", + "properties": { + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas zone", + "type": "string" + } + } + } + } + } + }, + "v1MachineCertificate": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + }, + "v1MachineCertificates": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "type": "object", + "properties": { + "machineCertificates": { + "type": "array", + "items": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "v1MachineHealth": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "v1MachineHealthCheckConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "v1MachineHealthCondition": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1MachineMaintenance": { + "type": "object", + "properties": { + "action": { + "description": "Machine maintenance mode action", + "type": "string", + "enum": [ + "cordon", + "uncordon" + ] + } + } + }, + "v1MachineMaintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1MachineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "v1MachinePoolConfigEntity": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1MachinePoolMeta": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "v1MachinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "v1MachinePoolRate": { + "description": "Machine pool estimated rate information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1MachinePoolsMachineUids": { + "properties": { + "machinePools": { + "type": "object", + "additionalProperties": { + "properties": { + "machineUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1MachineUids": { + "properties": { + "machineUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Macro": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1Macros": { + "properties": { + "macros": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + } + } + }, + "v1ManagedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "v1Manifest": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "properties": { + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + }, + "v1ManifestData": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + }, + "v1ManifestEntities": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Manifests array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "type": "object", + "properties": { + "draft": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + }, + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1ManifestEntity": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "type": "object", + "properties": { + "draft": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + }, + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + }, + "v1ManifestInputEntity": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + }, + "v1ManifestPublishedSpec": { + "description": "Manifest spec", + "properties": { + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + }, + "v1ManifestRefInputEntities": { + "description": "Pack manifests input params", + "properties": { + "manifests": { + "description": "Pack manifests array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + } + } + }, + "v1ManifestRefInputEntity": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + }, + "v1ManifestRefUpdateEntity": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + }, + "v1ManifestSpec": { + "description": "Manifest spec", + "type": "object", + "properties": { + "draft": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + }, + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + }, + "v1ManifestSummary": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + }, + "v1Memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "v1MetricAggregation": { + "description": "Aggregation values", + "type": "object", + "properties": { + "avg": { + "type": "number", + "x-omitempty": false + }, + "count": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "max": { + "type": "number", + "x-omitempty": false + }, + "min": { + "type": "number", + "x-omitempty": false + }, + "sum": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1MetricMetadata": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1MetricPoint": { + "description": "Metric Info", + "type": "object", + "properties": { + "avg": { + "type": "number" + }, + "count": { + "type": "number", + "format": "int64" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "value": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1MetricTimeSeries": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "aggregation": { + "description": "Aggregation values", + "type": "object", + "properties": { + "avg": { + "type": "number", + "x-omitempty": false + }, + "count": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "max": { + "type": "number", + "x-omitempty": false + }, + "min": { + "type": "number", + "x-omitempty": false + }, + "sum": { + "type": "number", + "x-omitempty": false + } + } + }, + "kind": { + "type": "string" + }, + "points": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Metric Info", + "type": "object", + "properties": { + "avg": { + "type": "number" + }, + "count": { + "type": "number", + "format": "int64" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "value": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "unit": { + "type": "string" + } + } + } + } + } + }, + "v1MetricTimeSeriesList": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "metrics": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "aggregation": { + "description": "Aggregation values", + "type": "object", + "properties": { + "avg": { + "type": "number", + "x-omitempty": false + }, + "count": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "max": { + "type": "number", + "x-omitempty": false + }, + "min": { + "type": "number", + "x-omitempty": false + }, + "sum": { + "type": "number", + "x-omitempty": false + } + } + }, + "kind": { + "type": "string" + }, + "points": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Metric Info", + "type": "object", + "properties": { + "avg": { + "type": "number" + }, + "count": { + "type": "number", + "format": "int64" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "value": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "unit": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1Metrics": { + "type": "object", + "properties": { + "aggregation": { + "description": "Aggregation values", + "type": "object", + "properties": { + "avg": { + "type": "number", + "x-omitempty": false + }, + "count": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "max": { + "type": "number", + "x-omitempty": false + }, + "min": { + "type": "number", + "x-omitempty": false + }, + "sum": { + "type": "number", + "x-omitempty": false + } + } + }, + "kind": { + "type": "string" + }, + "points": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Metric Info", + "type": "object", + "properties": { + "avg": { + "type": "number" + }, + "count": { + "type": "number", + "format": "int64" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "value": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "unit": { + "type": "string" + } + } + }, + "v1MetricsList": { + "type": "object", + "properties": { + "metadata": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "metrics": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "aggregation": { + "description": "Aggregation values", + "type": "object", + "properties": { + "avg": { + "type": "number", + "x-omitempty": false + }, + "count": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "max": { + "type": "number", + "x-omitempty": false + }, + "min": { + "type": "number", + "x-omitempty": false + }, + "sum": { + "type": "number", + "x-omitempty": false + } + } + }, + "kind": { + "type": "string" + }, + "points": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Metric Info", + "type": "object", + "properties": { + "avg": { + "type": "number" + }, + "count": { + "type": "number", + "format": "int64" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "value": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "unit": { + "type": "string" + } + } + } + } + } + }, + "v1MfaAuthenticationExtensions": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "v1MfaAuthenticatorSelection": { + "type": "object", + "properties": { + "authenticatorAttachment": { + "type": "string" + }, + "requireResidentKey": { + "type": "boolean" + }, + "residentKey": { + "type": "string" + }, + "userVerification": { + "type": "string" + } + } + }, + "v1MfaConveyancePreference": { + "type": "string", + "enum": [ + "none", + "indirect", + "direct", + "enterprise" + ] + }, + "v1MfaCredentialCreationRequest": { + "type": "object", + "properties": { + "_type": { + "type": "string" + }, + "authenticatorAttachment": { + "type": "string" + }, + "clientExtensionResults": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "deviceName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "rawId": { + "type": "string", + "format": "url-encoded-base64" + }, + "response": { + "type": "object", + "properties": { + "attestationObject": { + "type": "string", + "format": "url-encoded-base64" + }, + "clientDataJSON": { + "type": "string", + "format": "url-encoded-base64" + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1MfaCredentialDescriptor": { + "type": "object", + "properties": { + "attestationType": { + "type": "string" + }, + "id": { + "type": "string", + "format": "url-encoded-base64" + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + } + } + }, + "v1MfaCredentialParameter": { + "type": "object", + "properties": { + "alg": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + }, + "v1MfaDeviceMeta": { + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deviceName": { + "type": "string" + } + } + }, + "v1MfaDeviceName": { + "type": "object", + "properties": { + "deviceName": { + "type": "string" + } + } + }, + "v1MfaDevices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deviceName": { + "type": "string" + } + } + } + }, + "v1MfaLoginStart": { + "type": "object", + "properties": { + "publicKey": { + "type": "object", + "properties": { + "allowCredentials": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attestationType": { + "type": "string" + }, + "id": { + "type": "string", + "format": "url-encoded-base64" + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + } + } + } + }, + "challenge": { + "type": "string", + "format": "url-encoded-base64" + }, + "extensions": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "rpId": { + "type": "string" + }, + "timeout": { + "type": "integer" + }, + "userVerification": { + "type": "string" + } + } + } + } + }, + "v1MfaPublicKeyCredentialCreationOptions": { + "type": "object", + "properties": { + "attestation": { + "type": "string", + "enum": [ + "none", + "indirect", + "direct", + "enterprise" + ] + }, + "authenticatorSelection": { + "type": "object", + "properties": { + "authenticatorAttachment": { + "type": "string" + }, + "requireResidentKey": { + "type": "boolean" + }, + "residentKey": { + "type": "string" + }, + "userVerification": { + "type": "string" + } + } + }, + "challenge": { + "type": "string", + "format": "url-encoded-base64" + }, + "excludeCredentials": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attestationType": { + "type": "string" + }, + "id": { + "type": "string", + "format": "url-encoded-base64" + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + } + } + } + }, + "extensions": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "pubKeyCredParams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alg": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + } + }, + "rp": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "timeout": { + "type": "integer" + }, + "user": { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "id": { + "type": "object" + }, + "name": { + "type": "string" + } + } + } + } + }, + "v1MfaPublicKeyCredentialRequestOptions": { + "type": "object", + "properties": { + "allowCredentials": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attestationType": { + "type": "string" + }, + "id": { + "type": "string", + "format": "url-encoded-base64" + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + } + } + } + }, + "challenge": { + "type": "string", + "format": "url-encoded-base64" + }, + "extensions": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "rpId": { + "type": "string" + }, + "timeout": { + "type": "integer" + }, + "userVerification": { + "type": "string" + } + } + }, + "v1MfaRegistrationStart": { + "type": "object", + "properties": { + "publicKey": { + "type": "object", + "properties": { + "attestation": { + "type": "string", + "enum": [ + "none", + "indirect", + "direct", + "enterprise" + ] + }, + "authenticatorSelection": { + "type": "object", + "properties": { + "authenticatorAttachment": { + "type": "string" + }, + "requireResidentKey": { + "type": "boolean" + }, + "residentKey": { + "type": "string" + }, + "userVerification": { + "type": "string" + } + } + }, + "challenge": { + "type": "string", + "format": "url-encoded-base64" + }, + "excludeCredentials": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attestationType": { + "type": "string" + }, + "id": { + "type": "string", + "format": "url-encoded-base64" + }, + "transports": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + } + } + } + }, + "extensions": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "pubKeyCredParams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alg": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + } + }, + "rp": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "timeout": { + "type": "integer" + }, + "user": { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "id": { + "type": "object" + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + "v1MfaRelyingPartyEntity": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1MfaUserEntity": { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "id": { + "type": "object" + }, + "name": { + "type": "string" + } + } + }, + "v1MgmtApp": { + "description": "Spectro application management data", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "spectro application management specifications", + "properties": { + "appEnv": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "installedVersion": { + "type": "string" + }, + "latestVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "status": { + "description": "spectro application management status", + "properties": { + "appVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management app version information", + "properties": { + "intermediateVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + }, + "latestVerson": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "isFailed": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "messageLogs": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + }, + "upgradeHistory": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro management upgrade logs", + "properties": { + "upgradeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1MgmtAppContainersState": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + }, + "v1MgmtAppContainersStatus": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + }, + "v1MgmtAppCronJobStatus": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSuccessfulRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "v1MgmtAppEnvHealthStatus": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "cronJobs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSuccessfulRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + "deployments": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "desiredReplicaCount": { + "type": "integer" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "statefulSets": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "desiredReplicaCount": { + "type": "integer" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + } + } + } + }, + "v1MgmtAppHealth": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean" + }, + "podHealth": { + "type": "array", + "items": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean" + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "v1MgmtAppNameSpaceStatus": { + "type": "object", + "properties": { + "cronJobs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSuccessfulRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + "deployments": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "desiredReplicaCount": { + "type": "integer" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "statefulSets": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "desiredReplicaCount": { + "type": "integer" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + }, + "v1MgmtAppObjectStatus": { + "type": "object", + "properties": { + "availableReplicas": { + "type": "integer" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "desiredReplicaCount": { + "type": "integer" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "pods": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "v1MgmtAppPodsStatus": { + "type": "object", + "properties": { + "containers": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "type": "object", + "properties": { + "running": { + "type": "object", + "properties": { + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "terminated": { + "type": "object", + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "waiting": { + "type": "object", + "properties": { + "reason": { + "type": "string" + } + } + } + } + } + } + } + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "reason": { + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1MgmtAppPvcStatus": { + "type": "object", + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1MgmtAppSpec": { + "description": "spectro application management specifications", + "properties": { + "appEnv": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "installedVersion": { + "type": "string" + }, + "latestVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "v1MgmtAppStatus": { + "description": "spectro application management status", + "properties": { + "appVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management app version information", + "properties": { + "intermediateVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + }, + "latestVerson": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "isFailed": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "messageLogs": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + }, + "upgradeHistory": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro management upgrade logs", + "properties": { + "upgradeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1MgmtAppUpgrade": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "currentVersion": { + "type": "string", + "x-omitempty": false + }, + "previousVersion": { + "type": "string", + "x-omitempty": false + }, + "toBeUpgradedVersion": { + "type": "string", + "x-omitempty": false + } + } + }, + "status": { + "type": "object", + "properties": { + "action": { + "type": "string", + "x-omitempty": false + }, + "states": { + "type": "object", + "properties": { + "imageUpdate": { + "type": "object", + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "spectroClusterUpdate": { + "type": "object", + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "spectroServiceResume": { + "type": "object", + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "spectroVersionConfigMapUpdate": { + "type": "object", + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "spectroVersionServiceSuspend": { + "type": "object", + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "upgradeStatus": { + "type": "string", + "x-omitempty": false + }, + "versionHistory": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + } + }, + "v1MgmtAppVersion": { + "description": "spectro application management version", + "properties": { + "version": { + "type": "object", + "properties": { + "appEnv": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "installedVersion": { + "type": "string" + }, + "latestVersion": { + "type": "string" + } + } + } + } + }, + "v1MgmtBackupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "v1MgmtDbCollectionIndexInfo": { + "description": "Database info", + "type": "object", + "properties": { + "key": { + "additionalProperties": { + "type": "integer" + } + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "version": { + "type": "string" + } + } + }, + "v1MgmtDbCollectionInfo": { + "description": "Database info", + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "indexes": { + "type": "array", + "items": { + "description": "Database info", + "type": "object", + "properties": { + "key": { + "additionalProperties": { + "type": "integer" + } + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "version": { + "type": "string" + } + } + } + }, + "isCapped": { + "type": "boolean" + }, + "isReadOnly": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "storageSize": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + } + }, + "v1MgmtDbHealth": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "description": "Database info", + "type": "object", + "properties": { + "collections": { + "type": "array", + "items": { + "description": "Database info", + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "indexes": { + "type": "array", + "items": { + "description": "Database info", + "type": "object", + "properties": { + "key": { + "additionalProperties": { + "type": "integer" + } + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "version": { + "type": "string" + } + } + } + }, + "isCapped": { + "type": "boolean" + }, + "isReadOnly": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "storageSize": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + } + } + }, + "isEmpty": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + } + } + }, + "totalIndexSize": { + "type": "integer" + }, + "totalSize": { + "type": "integer" + } + } + }, + "v1MgmtDbInfo": { + "description": "Database info", + "type": "object", + "properties": { + "collections": { + "type": "array", + "items": { + "description": "Database info", + "type": "object", + "properties": { + "count": { + "type": "integer" + }, + "indexes": { + "type": "array", + "items": { + "description": "Database info", + "type": "object", + "properties": { + "key": { + "additionalProperties": { + "type": "integer" + } + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "version": { + "type": "string" + } + } + } + }, + "isCapped": { + "type": "boolean" + }, + "isReadOnly": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "storageSize": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + } + } + }, + "isEmpty": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + } + }, + "v1MgmtDeleteBackupFtpEntity": { + "description": "delete backups based on retention period", + "type": "object", + "properties": { + "fileTransferConfig": { + "description": "file transfer details", + "type": "object", + "properties": { + "backupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "ftp": { + "description": "ftp config", + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "password": { + "type": "string" + }, + "server": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + } + }, + "retentionPeriod": { + "type": "integer" + } + } + }, + "v1MgmtDeleteBackupS3Entity": { + "description": "delete backups based on retention period", + "type": "object", + "properties": { + "fileTransferConfig": { + "description": "file transfer details", + "type": "object", + "properties": { + "backupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "s3": { + "description": "s3 config", + "type": "object", + "properties": { + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "directory": { + "type": "string" + }, + "region": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + } + } + }, + "retentionPeriod": { + "type": "integer" + } + } + }, + "v1MgmtErrLog": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "causes": { + "type": "array", + "items": { + "type": "string" + } + }, + "data": { + "type": "string" + }, + "debug": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "errCode": { + "type": "string" + }, + "errMsg": { + "type": "string" + }, + "stackTraces": { + "type": "array", + "items": { + "type": "string" + } + }, + "userCtx": { + "type": "object", + "properties": { + "projectUid": { + "type": "string" + }, + "serviceResUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + } + } + } + } + }, + "v1MgmtErrLogs": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "ref": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "causes": { + "type": "array", + "items": { + "type": "string" + } + }, + "data": { + "type": "string" + }, + "debug": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "errCode": { + "type": "string" + }, + "errMsg": { + "type": "string" + }, + "stackTraces": { + "type": "array", + "items": { + "type": "string" + } + }, + "userCtx": { + "type": "object", + "properties": { + "projectUid": { + "type": "string" + }, + "serviceResUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1MgmtErrSpec": { + "type": "object", + "properties": { + "causes": { + "type": "array", + "items": { + "type": "string" + } + }, + "data": { + "type": "string" + }, + "debug": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "errCode": { + "type": "string" + }, + "errMsg": { + "type": "string" + }, + "stackTraces": { + "type": "array", + "items": { + "type": "string" + } + }, + "userCtx": { + "type": "object", + "properties": { + "projectUid": { + "type": "string" + }, + "serviceResUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + } + } + }, + "v1MgmtFileTransferFtpEntity": { + "description": "file transfer details", + "type": "object", + "properties": { + "backupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "ftp": { + "description": "ftp config", + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "password": { + "type": "string" + }, + "server": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + } + }, + "v1MgmtFileTransferS3Entity": { + "description": "file transfer details", + "type": "object", + "properties": { + "backupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "s3": { + "description": "s3 config", + "type": "object", + "properties": { + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "directory": { + "type": "string" + }, + "region": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + } + } + }, + "v1MgmtFtpConfig": { + "description": "ftp config", + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "password": { + "type": "string" + }, + "server": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "v1MgmtHash": { + "type": "object", + "required": [ + "hash" + ], + "properties": { + "hash": { + "type": "string" + } + } + }, + "v1MgmtListBackupFtpEntity": { + "description": "list ftp backups", + "type": "object", + "properties": { + "fileTransferConfig": { + "description": "file transfer details", + "type": "object", + "properties": { + "backupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "ftp": { + "description": "ftp config", + "type": "object", + "properties": { + "directory": { + "type": "string" + }, + "password": { + "type": "string" + }, + "server": { + "type": "string" + }, + "username": { + "type": "string" + } + } + } + } + } + } + }, + "v1MgmtListBackupS3Entity": { + "description": "list s3 backups", + "type": "object", + "properties": { + "fileTransferConfig": { + "description": "file transfer details", + "type": "object", + "properties": { + "backupSpec": { + "description": "backup spec", + "type": "object", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "scheduleType": { + "type": "string", + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ] + } + } + }, + "s3": { + "description": "s3 config", + "type": "object", + "properties": { + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "directory": { + "type": "string" + }, + "region": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + } + } + } + } + }, + "v1MgmtMigrateEntity": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "db": { + "type": "string" + }, + "host": { + "type": "string" + }, + "isServiceRecord": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "uri": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "v1MgmtMigrationStatuses": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1MgmtMsgBrokerReinitStatus": { + "type": "object", + "properties": { + "failures": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + }, + "message": { + "type": "string" + } + } + } + }, + "success": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + }, + "message": { + "type": "string" + } + } + } + } + } + }, + "v1MgmtMsgBrokerReinitStatusEntity": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + }, + "message": { + "type": "string" + } + } + }, + "v1MgmtPodHealth": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean" + }, + "name": { + "type": "string" + } + } + }, + "v1MgmtS3Config": { + "description": "s3 config", + "type": "object", + "properties": { + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "directory": { + "type": "string" + }, + "region": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1MgmtUpgradeState": { + "type": "object", + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1MonthlyUsage": { + "description": "Monthly usage object", + "properties": { + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tenantUsages": { + "description": "List of tenants usage", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Tenant usage object", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "description": "Tenant uid", + "type": "string" + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + } + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + }, + "v1MsgBrokerConnection": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1MsgBrokerConnectionList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "v1MsgBrokerConnections": { + "type": "object", + "properties": { + "connections": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "limit": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "numOfConnections": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "totalConnections": { + "type": "integer" + } + } + }, + "v1MsgBrokerHealth": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "connections": { + "type": "object", + "properties": { + "connections": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "limit": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "numOfConnections": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "totalConnections": { + "type": "integer" + } + } + }, + "nodeId": { + "type": "string" + }, + "routes": { + "type": "object", + "properties": { + "numRoutes": { + "type": "integer" + }, + "routes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "didSolicit": { + "type": "boolean" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "isConfigured": { + "type": "boolean" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingSize": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "remoteId": { + "type": "string" + }, + "rid": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "subscriptions": { + "type": "integer" + } + } + } + }, + "serverId": { + "type": "string" + } + } + }, + "variables": { + "type": "object", + "properties": { + "authRequired": { + "type": "boolean" + }, + "authTimeout": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "configLoadTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "connectUrls": { + "type": "array", + "items": { + "type": "string" + } + }, + "connections": { + "type": "integer" + }, + "cores": { + "type": "integer" + }, + "cpu": { + "type": "number" + }, + "gitCommit": { + "type": "string" + }, + "go": { + "type": "string" + }, + "gomaxprocs": { + "type": "integer" + }, + "host": { + "type": "string" + }, + "httpHost": { + "type": "string" + }, + "httpPort": { + "type": "integer" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "leafNodes": { + "type": "integer" + }, + "maxConnections": { + "type": "integer" + }, + "maxControlLine": { + "type": "integer" + }, + "maxPayload": { + "type": "integer" + }, + "maxPending": { + "type": "integer" + }, + "mem": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pingInterval": { + "type": "integer" + }, + "pingMax": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "proto": { + "type": "integer" + }, + "remotes": { + "type": "integer" + }, + "routes": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "slowConsumers": { + "type": "integer" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptions": { + "type": "integer" + }, + "tlsRequired": { + "type": "boolean" + }, + "tlsTimeout": { + "type": "integer" + }, + "totalConnections": { + "type": "integer" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + }, + "writeDeadline": { + "type": "integer" + } + } + } + } + } + } + } + }, + "status": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "allyPublishersByTenant": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "duplicateSubscribersCount": { + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "hubbleSubscribersByService": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "hubbleSubscribersByTenant": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "hubbleSubscribersByType": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "nodeId": { + "type": "string" + }, + "subscriberWithAbnormalRTT": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "subscribersWithAbnormalSubscriptions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "uniqueSubscribers": { + "type": "integer" + }, + "unrecognizedClients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1MsgBrokerNodeHealth": { + "type": "object", + "properties": { + "allyPublishersByTenant": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "duplicateSubscribersCount": { + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "hubbleSubscribersByService": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "hubbleSubscribersByTenant": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "hubbleSubscribersByType": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "nodeId": { + "type": "string" + }, + "subscriberWithAbnormalRTT": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "subscribersWithAbnormalSubscriptions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "uniqueSubscribers": { + "type": "integer" + }, + "unrecognizedClients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1MsgBrokerNodeHealthSpec": { + "type": "object", + "properties": { + "connections": { + "type": "object", + "properties": { + "connections": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "limit": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "numOfConnections": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "totalConnections": { + "type": "integer" + } + } + }, + "nodeId": { + "type": "string" + }, + "routes": { + "type": "object", + "properties": { + "numRoutes": { + "type": "integer" + }, + "routes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "didSolicit": { + "type": "boolean" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "isConfigured": { + "type": "boolean" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingSize": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "remoteId": { + "type": "string" + }, + "rid": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "subscriptions": { + "type": "integer" + } + } + } + }, + "serverId": { + "type": "string" + } + } + }, + "variables": { + "type": "object", + "properties": { + "authRequired": { + "type": "boolean" + }, + "authTimeout": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "configLoadTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "connectUrls": { + "type": "array", + "items": { + "type": "string" + } + }, + "connections": { + "type": "integer" + }, + "cores": { + "type": "integer" + }, + "cpu": { + "type": "number" + }, + "gitCommit": { + "type": "string" + }, + "go": { + "type": "string" + }, + "gomaxprocs": { + "type": "integer" + }, + "host": { + "type": "string" + }, + "httpHost": { + "type": "string" + }, + "httpPort": { + "type": "integer" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "leafNodes": { + "type": "integer" + }, + "maxConnections": { + "type": "integer" + }, + "maxControlLine": { + "type": "integer" + }, + "maxPayload": { + "type": "integer" + }, + "maxPending": { + "type": "integer" + }, + "mem": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pingInterval": { + "type": "integer" + }, + "pingMax": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "proto": { + "type": "integer" + }, + "remotes": { + "type": "integer" + }, + "routes": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "slowConsumers": { + "type": "integer" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptions": { + "type": "integer" + }, + "tlsRequired": { + "type": "boolean" + }, + "tlsTimeout": { + "type": "integer" + }, + "totalConnections": { + "type": "integer" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + }, + "writeDeadline": { + "type": "integer" + } + } + } + } + }, + "v1MsgBrokerNodesHealthSpec": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "connections": { + "type": "object", + "properties": { + "connections": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "limit": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "numOfConnections": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "totalConnections": { + "type": "integer" + } + } + }, + "nodeId": { + "type": "string" + }, + "routes": { + "type": "object", + "properties": { + "numRoutes": { + "type": "integer" + }, + "routes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "didSolicit": { + "type": "boolean" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "isConfigured": { + "type": "boolean" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingSize": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "remoteId": { + "type": "string" + }, + "rid": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "subscriptions": { + "type": "integer" + } + } + } + }, + "serverId": { + "type": "string" + } + } + }, + "variables": { + "type": "object", + "properties": { + "authRequired": { + "type": "boolean" + }, + "authTimeout": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "configLoadTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "connectUrls": { + "type": "array", + "items": { + "type": "string" + } + }, + "connections": { + "type": "integer" + }, + "cores": { + "type": "integer" + }, + "cpu": { + "type": "number" + }, + "gitCommit": { + "type": "string" + }, + "go": { + "type": "string" + }, + "gomaxprocs": { + "type": "integer" + }, + "host": { + "type": "string" + }, + "httpHost": { + "type": "string" + }, + "httpPort": { + "type": "integer" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "leafNodes": { + "type": "integer" + }, + "maxConnections": { + "type": "integer" + }, + "maxControlLine": { + "type": "integer" + }, + "maxPayload": { + "type": "integer" + }, + "maxPending": { + "type": "integer" + }, + "mem": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pingInterval": { + "type": "integer" + }, + "pingMax": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "proto": { + "type": "integer" + }, + "remotes": { + "type": "integer" + }, + "routes": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "slowConsumers": { + "type": "integer" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptions": { + "type": "integer" + }, + "tlsRequired": { + "type": "boolean" + }, + "tlsTimeout": { + "type": "integer" + }, + "totalConnections": { + "type": "integer" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + }, + "writeDeadline": { + "type": "integer" + } + } + } + } + } + } + } + }, + "v1MsgBrokerNodesHealthStatus": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "allyPublishersByTenant": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "duplicateSubscribersCount": { + "type": "object", + "additionalProperties": { + "type": "integer" + } + }, + "hubbleSubscribersByService": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "hubbleSubscribersByTenant": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "hubbleSubscribersByType": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "nodeId": { + "type": "string" + }, + "subscriberWithAbnormalRTT": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "subscribersWithAbnormalSubscriptions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "uniqueSubscribers": { + "type": "integer" + }, + "unrecognizedClients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptionList": { + "type": "array", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1MsgBrokerRoutes": { + "type": "object", + "properties": { + "numRoutes": { + "type": "integer" + }, + "routes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "didSolicit": { + "type": "boolean" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "isConfigured": { + "type": "boolean" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingSize": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "remoteId": { + "type": "string" + }, + "rid": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "subscriptions": { + "type": "integer" + } + } + } + }, + "serverId": { + "type": "string" + } + } + }, + "v1MsgBrokerVariables": { + "type": "object", + "properties": { + "authRequired": { + "type": "boolean" + }, + "authTimeout": { + "type": "integer" + }, + "cluster": { + "type": "object", + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "configLoadTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "connectUrls": { + "type": "array", + "items": { + "type": "string" + } + }, + "connections": { + "type": "integer" + }, + "cores": { + "type": "integer" + }, + "cpu": { + "type": "number" + }, + "gitCommit": { + "type": "string" + }, + "go": { + "type": "string" + }, + "gomaxprocs": { + "type": "integer" + }, + "host": { + "type": "string" + }, + "httpHost": { + "type": "string" + }, + "httpPort": { + "type": "integer" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "leafNodes": { + "type": "integer" + }, + "maxConnections": { + "type": "integer" + }, + "maxControlLine": { + "type": "integer" + }, + "maxPayload": { + "type": "integer" + }, + "maxPending": { + "type": "integer" + }, + "mem": { + "type": "integer" + }, + "now": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pingInterval": { + "type": "integer" + }, + "pingMax": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "proto": { + "type": "integer" + }, + "remotes": { + "type": "integer" + }, + "routes": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "slowConsumers": { + "type": "integer" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "subscriptions": { + "type": "integer" + }, + "tlsRequired": { + "type": "boolean" + }, + "tlsTimeout": { + "type": "integer" + }, + "totalConnections": { + "type": "integer" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + }, + "writeDeadline": { + "type": "integer" + } + } + }, + "v1MsgSubscriber": { + "description": "Message subscriber request", + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "service": { + "type": "string" + }, + "userId": { + "type": "string" + } + } + }, + "v1Nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1NatsConfiguration": { + "description": "Describes the response that contains the nats configuration to establish credentials", + "type": "object", + "properties": { + "connectionString": { + "description": "Describes the preCalculated connection string, can be used directly to make connection", + "type": "string" + }, + "enableTls": { + "description": "Describes the NATs application option to use a TLS based custom dialer. Its enabled when external Certificate is used over the existing one.", + "type": "boolean" + }, + "insecureTls": { + "description": "Describes the NATs tls option to skip verifying the client certificate", + "type": "boolean" + }, + "password": { + "description": "Describes the NATs user's password", + "type": "string" + }, + "scheme": { + "description": "Describes the NATs protocol for the connection. Eg- 'tls', 'nats'", + "type": "string" + }, + "tlsCertificate": { + "description": "Describes the NATs tls certificate used for making a secure connection", + "type": "string" + }, + "tlsKey": { + "description": "Describes the NATs tls certificate key used for making a secure connection", + "type": "string" + }, + "urls": { + "description": "Describes the URLs of the nats nodes used in nats HA setup where the client will connect", + "type": "string" + }, + "userName": { + "description": "Describes the NATs user name", + "type": "string" + } + } + }, + "v1NatsCredentialRequest": { + "description": "Describes the request for resource's nats credential", + "type": "object", + "properties": { + "clusterUid": { + "description": "Deprecated. please use resourceUid", + "type": "string" + }, + "isSystem": { + "description": "Describes if its a system request", + "type": "boolean" + }, + "resourceUid": { + "description": "Describes the resource for which credentials has to be fetched", + "type": "string" + }, + "serviceName": { + "description": "Describes the service for which credentials has to be fetched. Possible values [ally, jet]", + "type": "string", + "enum": [ + "ally", + "jet" + ] + }, + "tenantUid": { + "description": "Describes the tenant of the resource", + "type": "string" + } + } + }, + "v1NatsCredentials": { + "description": "Describes the response that contains the nats credentials", + "type": "object", + "properties": { + "allowedPublisher": { + "description": "Describes the subject on which client is allowed to publish", + "type": "string" + }, + "allowedSubcriber": { + "description": "Describes the subject on which client is allowed to subscribe", + "type": "string" + }, + "jwt": { + "description": "Describes the jwt token which will be used as an credential for the nats", + "type": "string" + }, + "seed": { + "description": "Describes the seed for the jwt", + "type": "string" + } + } + }, + "v1NatsRoute": { + "type": "object", + "properties": { + "didSolicit": { + "type": "boolean" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "isConfigured": { + "type": "boolean" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingSize": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "remoteId": { + "type": "string" + }, + "rid": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "subscriptions": { + "type": "integer" + } + } + }, + "v1NestedCloudConfigStatus": { + "description": "Defines the status of virtual cloud config", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + } + } + }, + "v1Nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "v1NodesAutoRemediationSettings": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1NonFipsConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "description": "enable or disable the non FIPS complaint", + "type": "string", + "default": "nonFipsDisabled", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ] + } + } + }, + "v1Notification": { + "description": "Describes event notification and action definition", + "type": "object", + "properties": { + "action": { + "description": "Describes actions for the notification", + "type": "object", + "properties": { + "ack": { + "description": "Describes the acknowledgement status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "actionMessage": { + "description": "Describes information related to notification action", + "type": "string" + }, + "actionType": { + "description": "Describes action type for the notification. Possible Values [NotifyActionPacksUpdate, NotifyActionClusterProfileUpdate, NotifyActionPackRegistryUpdate, NotifyActionClusterUpdate, NotifyActionNone]", + "type": "string", + "enum": [ + "NotifyActionPacksUpdate", + "NotifyActionClusterProfileUpdate", + "NotifyActionPackRegistryUpdate", + "NotifyActionClusterUpdate", + "NotifyActionNone" + ] + }, + "events": { + "description": "Describes the events happened for the notifications", + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "isDone": { + "description": "Describes the \"Done\" status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "isInfo": { + "description": "Describes the notification as a information", + "type": "boolean", + "x-omitempty": false + }, + "link": { + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "source": { + "description": "Describes origin info for the notification", + "type": "object", + "properties": { + "component": { + "description": "Describes component where notification originated", + "type": "string" + } + } + }, + "type": { + "description": "Describes type of notification. Possible values [NotificationPackUpdate, NotificationPackRegistryUpdate, NotificationNone]", + "type": "string", + "enum": [ + "NotificationPackUpdate", + "NotificationPackRegistryUpdate", + "NotificationNone" + ] + } + } + }, + "v1NotificationAction": { + "description": "Describes actions for the notification", + "type": "object", + "properties": { + "ack": { + "description": "Describes the acknowledgement status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "actionMessage": { + "description": "Describes information related to notification action", + "type": "string" + }, + "actionType": { + "description": "Describes action type for the notification. Possible Values [NotifyActionPacksUpdate, NotifyActionClusterProfileUpdate, NotifyActionPackRegistryUpdate, NotifyActionClusterUpdate, NotifyActionNone]", + "type": "string", + "enum": [ + "NotifyActionPacksUpdate", + "NotifyActionClusterProfileUpdate", + "NotifyActionPackRegistryUpdate", + "NotifyActionClusterUpdate", + "NotifyActionNone" + ] + }, + "events": { + "description": "Describes the events happened for the notifications", + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "isDone": { + "description": "Describes the \"Done\" status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "isInfo": { + "description": "Describes the notification as a information", + "type": "boolean", + "x-omitempty": false + }, + "link": { + "type": "string" + } + } + }, + "v1NotificationEvent": { + "description": "Describes notification event details", + "type": "object", + "properties": { + "component": { + "description": "Describes component of notification event", + "type": "string" + }, + "digest": { + "description": "Describes notification event digest", + "type": "string" + }, + "message": { + "description": "Describes a information for the notification event", + "type": "string" + }, + "meta": { + "description": "Describes a event messages with meta digest as the key", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "type": { + "description": "Describes notification event type", + "type": "string", + "enum": [ + "NotificationPackSync", + "NotificationClusterProfileSync" + ] + } + } + }, + "v1NotificationSource": { + "description": "Describes origin info for the notification", + "type": "object", + "properties": { + "component": { + "description": "Describes component where notification originated", + "type": "string" + } + } + }, + "v1Notifications": { + "description": "Describe a list of generated notifications", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Describe a list of generated notifications", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes event notification and action definition", + "type": "object", + "properties": { + "action": { + "description": "Describes actions for the notification", + "type": "object", + "properties": { + "ack": { + "description": "Describes the acknowledgement status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "actionMessage": { + "description": "Describes information related to notification action", + "type": "string" + }, + "actionType": { + "description": "Describes action type for the notification. Possible Values [NotifyActionPacksUpdate, NotifyActionClusterProfileUpdate, NotifyActionPackRegistryUpdate, NotifyActionClusterUpdate, NotifyActionNone]", + "type": "string", + "enum": [ + "NotifyActionPacksUpdate", + "NotifyActionClusterProfileUpdate", + "NotifyActionPackRegistryUpdate", + "NotifyActionClusterUpdate", + "NotifyActionNone" + ] + }, + "events": { + "description": "Describes the events happened for the notifications", + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "isDone": { + "description": "Describes the \"Done\" status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "isInfo": { + "description": "Describes the notification as a information", + "type": "boolean", + "x-omitempty": false + }, + "link": { + "type": "string" + } + } + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "source": { + "description": "Describes origin info for the notification", + "type": "object", + "properties": { + "component": { + "description": "Describes component where notification originated", + "type": "string" + } + } + }, + "type": { + "description": "Describes type of notification. Possible values [NotificationPackUpdate, NotificationPackRegistryUpdate, NotificationNone]", + "type": "string", + "enum": [ + "NotificationPackUpdate", + "NotificationPackRegistryUpdate", + "NotificationNone" + ] + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1OS": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ObjectEntity": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ObjectMeta": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "v1ObjectMetaInputEntity": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "v1ObjectMetaInputEntitySchema": { + "description": "Resource metadata", + "type": "object", + "required": [ + "metadata" + ], + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1ObjectMetaUpdateEntity": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ObjectReference": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "v1ObjectResReference": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ObjectScopeEntity": { + "description": "Object scope identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ObjectTagsEntity": { + "description": "Object identity meta with tags", + "type": "object", + "properties": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1OciImageRegistry": { + "description": "Oci Image Registry", + "type": "object", + "properties": { + "baseContentPath": { + "description": "baseContentPath is the root path for the registry content", + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "mirrorRegistries": { + "description": "mirrorRegistries contains the array of image sources like gcr.io, ghcr.io, docker.io", + "type": "string" + }, + "name": { + "type": "string" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "v1OciRegistries": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Oci registry information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Image registry spec", + "type": "object", + "properties": { + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "type": "string" + }, + "registryType": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "OCI registry status summary", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1OciRegistry": { + "description": "Oci registry information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Image registry spec", + "type": "object", + "properties": { + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "type": "string" + }, + "registryType": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "OCI registry status summary", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "v1OciRegistryAuth": { + "description": "Auth credentials of the oci registry", + "type": "object", + "properties": { + "password": { + "description": "Password in the credentials", + "type": "string", + "format": "password" + }, + "username": { + "description": "Username in the credentials", + "type": "string" + } + } + }, + "v1OciRegistryEntity": { + "description": "Oci registry credentials", + "type": "object", + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "providerType": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1OciRegistrySpec": { + "description": "Image registry spec", + "type": "object", + "properties": { + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "type": "string" + }, + "registryType": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1OciRegistryStatusSummary": { + "description": "OCI registry status summary", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + }, + "v1OidcAuth": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string" + }, + "org": { + "type": "string" + } + } + }, + "v1OidcAuthLogin": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + } + } + }, + "v1OidcAuthorizationTokenResponse": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "error": { + "type": "string" + }, + "error_description": { + "type": "string" + }, + "expires_in": { + "type": "integer" + }, + "id_token": { + "type": "string" + }, + "raw": { + "type": "object" + }, + "refresh_token": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1OidcIssuerTls": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "v1OidcLogins": { + "description": "loginsDetails", + "type": "object", + "properties": { + "systemLogins": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the allowed sso login details", + "type": "object", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + } + } + }, + "tenantLogin": { + "type": "object", + "properties": { + "authType": { + "type": "string" + }, + "redirectUrl": { + "type": "string" + } + } + } + } + }, + "v1OidcRefreshToken": { + "description": "oidc request with token", + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "v1OpenIDProviderMetadataResponse": { + "type": "object", + "properties": { + "authorization_endpoint": { + "description": "REQUIRED. URL of the OP's OAuth 2.0 Authorization Endpoint", + "type": "string" + }, + "claims_supported": { + "description": "RECOMMENDED. JSON array containing a list of the Claim Names of the Claims that the OpenID Provider MAY be able to supply values for", + "type": "string" + }, + "id_token_signing_alg_values_supported": { + "description": "REQUIRED. JSON array containing a list of the JWS signing algorithms (alg values) supported by the OP for the ID Token to encode the Claims in a JWT", + "type": "object" + }, + "issuer": { + "description": "REQUIRED. URL using the https scheme with no query or fragment component that the OP asserts as its Issuer Identifier", + "type": "string" + }, + "jwks_uri": { + "description": "REQUIRED. URL of the OP's JSON Web Key Set [JWK] document.", + "type": "string" + }, + "registration_endpoint": { + "description": "RECOMMENDED. URL of the OP's Dynamic Client Registration Endpoint", + "type": "string" + }, + "response_types_supported": { + "description": "REQUIRED. JSON array containing a list of the OAuth 2.0 response_type values that this OP supports", + "type": "string" + }, + "scopes_supported": { + "description": "RECOMMENDED. JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this server supports", + "type": "string" + }, + "subject_types_supported": { + "description": "REQUIRED. JSON array containing a list of the Subject Identifier types that this OP supports", + "type": "string" + }, + "token_endpoint": { + "description": "URL of the OP's OAuth 2.0 Token Endpoint", + "type": "string" + }, + "userinfo_endpoint": { + "description": "RECOMMENDED. URL of the OP's UserInfo Endpoint", + "type": "string" + } + } + }, + "v1OpenStackAccount": { + "description": "OpenStack account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "auth-url,project,username,password,domain,cacert etc", + "type": "object", + "required": [ + "identityEndpoint", + "username", + "password" + ], + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1OpenStackAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "auth-url,project,username,password,domain,cacert etc", + "type": "object", + "required": [ + "identityEndpoint", + "username", + "password" + ], + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1OpenStackAz": { + "description": "OpenStack az entity", + "type": "object", + "properties": { + "name": { + "description": "Name of OpenStack az", + "type": "string" + } + } + }, + "v1OpenStackAzs": { + "description": "List of OpenStack azs", + "type": "object", + "required": [ + "azs" + ], + "properties": { + "azs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack az entity", + "type": "object", + "properties": { + "name": { + "description": "Name of OpenStack az", + "type": "string" + } + } + } + } + } + }, + "v1OpenStackCloudAccount": { + "description": "auth-url,project,username,password,domain,cacert etc", + "type": "object", + "required": [ + "identityEndpoint", + "username", + "password" + ], + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + } + }, + "v1OpenStackCloudClusterConfigEntity": { + "description": "Openstack cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + "v1OpenStackCloudConfig": { + "description": "OpenStackCloudConfig is the Schema for the OpenStackcloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "OpenStackCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "DiskGiB is used to configure rootVolume, the volume metadata to boot from", + "type": "integer", + "format": "int32" + }, + "flavor": { + "description": "Openstack flavor name, only return argument", + "type": "string" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "image": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "status": { + "description": "OpenStackCloudConfigStatus defines the observed state of OpenStackCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "type": "boolean" + } + } + } + } + }, + "v1OpenStackCloudConfigSpec": { + "description": "OpenStackCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "DiskGiB is used to configure rootVolume, the volume metadata to boot from", + "type": "integer", + "format": "int32" + }, + "flavor": { + "description": "Openstack flavor name, only return argument", + "type": "string" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "image": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1OpenStackCloudConfigStatus": { + "description": "OpenStackCloudConfigStatus defines the observed state of OpenStackCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "type": "boolean" + } + } + }, + "v1OpenStackClusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "v1OpenStackDomain": { + "description": "OpenStack domain. A Domain is a collection of projects, users, and roles", + "type": "object", + "properties": { + "description": { + "description": "Description is the description of the Domain", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the domain", + "type": "string" + }, + "name": { + "description": "Name is the name of the domain", + "type": "string" + } + } + }, + "v1OpenStackFlavor": { + "description": "OpenStack flavor entity. Flavor represent (virtual) hardware configurations for server resources", + "type": "object", + "properties": { + "disk": { + "description": "Disk is the amount of root disk, measured in GB", + "type": "integer" + }, + "ephemeral": { + "description": "Ephemeral is the amount of ephemeral disk space, measured in GB", + "type": "integer" + }, + "id": { + "description": "ID is the flavor's unique ID", + "type": "string" + }, + "memory": { + "description": "Amount of memory, measured in MB", + "type": "integer" + }, + "name": { + "description": "Name is the name of the flavor", + "type": "string" + }, + "vcpus": { + "description": "VCPUs indicates how many (virtual) CPUs are available for this flavor", + "type": "integer" + } + } + }, + "v1OpenStackFlavors": { + "description": "List of OpenStack flavours", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack flavor entity. Flavor represent (virtual) hardware configurations for server resources", + "type": "object", + "properties": { + "disk": { + "description": "Disk is the amount of root disk, measured in GB", + "type": "integer" + }, + "ephemeral": { + "description": "Ephemeral is the amount of ephemeral disk space, measured in GB", + "type": "integer" + }, + "id": { + "description": "ID is the flavor's unique ID", + "type": "string" + }, + "memory": { + "description": "Amount of memory, measured in MB", + "type": "integer" + }, + "name": { + "description": "Name is the name of the flavor", + "type": "string" + }, + "vcpus": { + "description": "VCPUs indicates how many (virtual) CPUs are available for this flavor", + "type": "integer" + } + } + } + } + } + }, + "v1OpenStackKeypair": { + "description": "OpenStack keypair. KeyPair is an SSH key known to the OpenStack Cloud that is available to be injected into servers", + "type": "object", + "properties": { + "name": { + "description": "Name is used to refer to this keypair from other services within this region", + "type": "string" + }, + "publicKey": { + "description": "PublicKey is the public key from this pair, in OpenSSH format", + "type": "string" + } + } + }, + "v1OpenStackKeypairs": { + "description": "List of OpenStack keypairs", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack keypair. KeyPair is an SSH key known to the OpenStack Cloud that is available to be injected into servers", + "type": "object", + "properties": { + "name": { + "description": "Name is used to refer to this keypair from other services within this region", + "type": "string" + }, + "publicKey": { + "description": "PublicKey is the public key from this pair, in OpenSSH format", + "type": "string" + } + } + } + } + } + }, + "v1OpenStackMachine": { + "description": "OpenStack cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "OpenStack cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "nics" + ], + "properties": { + "az": { + "type": "string" + }, + "image": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "OpenStack network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "projectId": { + "type": "string" + }, + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1OpenStackMachineConfigEntity": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1OpenStackMachinePoolCloudConfigEntity": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "Root disk size", + "type": "integer", + "format": "int32" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "v1OpenStackMachinePoolConfig": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "DiskGiB is used to configure rootVolume, the volume metadata to boot from", + "type": "integer", + "format": "int32" + }, + "flavor": { + "description": "Openstack flavor name, only return argument", + "type": "string" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "image": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1OpenStackMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "Root disk size", + "type": "integer", + "format": "int32" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1OpenStackMachineSpec": { + "description": "OpenStack cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "nics" + ], + "properties": { + "az": { + "type": "string" + }, + "image": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "OpenStack network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "projectId": { + "type": "string" + }, + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "v1OpenStackMachines": { + "description": "OpenStack machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "OpenStack cloud VM definition spec", + "type": "object", + "required": [ + "instanceType", + "nics" + ], + "properties": { + "az": { + "type": "string" + }, + "image": { + "type": "string" + }, + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "OpenStack network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "projectId": { + "type": "string" + }, + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeyName": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1OpenStackNetwork": { + "description": "OpenStack network", + "type": "object", + "properties": { + "description": { + "description": "Description of OpenStack network", + "type": "string" + }, + "id": { + "description": "Id of OpenStack network", + "type": "string" + }, + "name": { + "description": "Name of OpenStack network", + "type": "string" + }, + "subnets": { + "description": "Subnets associated with OpenStack network", + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack subnet entity", + "type": "object", + "properties": { + "description": { + "description": "Description for the network", + "type": "string" + }, + "id": { + "description": "UUID for the network", + "type": "string" + }, + "name": { + "description": "Human-readable name for the network. Might not be unique", + "type": "string" + } + } + } + } + } + }, + "v1OpenStackNetworks": { + "description": "List of OpenStack networks", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack network", + "type": "object", + "properties": { + "description": { + "description": "Description of OpenStack network", + "type": "string" + }, + "id": { + "description": "Id of OpenStack network", + "type": "string" + }, + "name": { + "description": "Name of OpenStack network", + "type": "string" + }, + "subnets": { + "description": "Subnets associated with OpenStack network", + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack subnet entity", + "type": "object", + "properties": { + "description": { + "description": "Description for the network", + "type": "string" + }, + "id": { + "description": "UUID for the network", + "type": "string" + }, + "name": { + "description": "Human-readable name for the network. Might not be unique", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1OpenStackNic": { + "description": "OpenStack network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1OpenStackProject": { + "description": "Project represents an OpenStack Identity Project", + "type": "object", + "properties": { + "description": { + "description": "Description is the description of the project", + "type": "string" + }, + "domainId": { + "description": "DomainID is the domain ID the project belongs to", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the project", + "type": "string" + }, + "name": { + "description": "Name is the name of the project", + "type": "string" + }, + "parentProjectId": { + "description": "ParentID is the parent_id of the project", + "type": "string" + } + } + }, + "v1OpenStackProjects": { + "description": "Array of OpenStack projects", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project represents an OpenStack Identity Project", + "type": "object", + "properties": { + "description": { + "description": "Description is the description of the project", + "type": "string" + }, + "domainId": { + "description": "DomainID is the domain ID the project belongs to", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the project", + "type": "string" + }, + "name": { + "description": "Name is the name of the project", + "type": "string" + }, + "parentProjectId": { + "description": "ParentID is the parent_id of the project", + "type": "string" + } + } + } + } + } + }, + "v1OpenStackRegion": { + "description": "OpenStack region entity", + "type": "object", + "properties": { + "description": { + "description": "Description of OpenStack region", + "type": "string" + }, + "id": { + "description": "Id of OpenStack region", + "type": "string" + }, + "parentRegionId": { + "description": "Parent region id of OpenStack region", + "type": "string" + } + } + }, + "v1OpenStackRegions": { + "description": "List of OpenStack regions and domains", + "type": "object", + "required": [ + "regions", + "domains" + ], + "properties": { + "domains": { + "description": "List of OpenStack domains", + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack domain. A Domain is a collection of projects, users, and roles", + "type": "object", + "properties": { + "description": { + "description": "Description is the description of the Domain", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the domain", + "type": "string" + }, + "name": { + "description": "Name is the name of the domain", + "type": "string" + } + } + } + }, + "regions": { + "description": "List of OpenStack regions", + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack region entity", + "type": "object", + "properties": { + "description": { + "description": "Description of OpenStack region", + "type": "string" + }, + "id": { + "description": "Id of OpenStack region", + "type": "string" + }, + "parentRegionId": { + "description": "Parent region id of OpenStack region", + "type": "string" + } + } + } + } + } + }, + "v1OpenStackResource": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1OpenStackSubnet": { + "description": "OpenStack subnet entity", + "type": "object", + "properties": { + "description": { + "description": "Description for the network", + "type": "string" + }, + "id": { + "description": "UUID for the network", + "type": "string" + }, + "name": { + "description": "Human-readable name for the network. Might not be unique", + "type": "string" + } + } + }, + "v1OpenstackFlavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "v1OrgState": { + "description": "Org state", + "type": "object", + "properties": { + "state": { + "type": "string" + } + } + }, + "v1Organization": { + "description": "Describes user's organization details", + "type": "object", + "properties": { + "authType": { + "description": "Describes user's enabled authorization mode", + "type": "string" + }, + "name": { + "description": "Describes user's organization name", + "type": "string" + }, + "redirectUrl": { + "description": "Describes user's organization authentication url", + "type": "string" + }, + "ssoLogins": { + "description": "Describes the allowed sso logins", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the allowed sso login details", + "type": "object", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + } + } + } + } + }, + "v1Organizations": { + "description": "Returns a list of user's organizations details and login methods", + "type": "object", + "properties": { + "organizations": { + "description": "Describes a list of user's organization", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes user's organization details", + "type": "object", + "properties": { + "authType": { + "description": "Describes user's enabled authorization mode", + "type": "string" + }, + "name": { + "description": "Describes user's organization name", + "type": "string" + }, + "redirectUrl": { + "description": "Describes user's organization authentication url", + "type": "string" + }, + "ssoLogins": { + "description": "Describes the allowed sso logins", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the allowed sso login details", + "type": "object", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1OsPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + }, + "v1OsPatchEntity": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "v1OsType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + }, + "v1OverloadSpec": { + "description": "Overload spec", + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string", + "x-omitempty": false + }, + "ipAddress": { + "type": "string" + }, + "ipPools": { + "type": "array", + "items": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + } + }, + "status": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "isSelfHosted": { + "type": "boolean" + }, + "isSystem": { + "type": "boolean" + }, + "spectroClusterUid": { + "type": "string", + "x-omitempty": false + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1OverloadStatus": { + "description": "Overload status", + "type": "object", + "properties": { + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isReady": { + "type": "boolean", + "x-omitempty": false + }, + "kubectlCommands": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1OverloadVsphereOva": { + "description": "Overload ova details", + "type": "object", + "properties": { + "location": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1Overlord": { + "description": "Overlord defintiion", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Overload spec", + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string", + "x-omitempty": false + }, + "ipAddress": { + "type": "string" + }, + "ipPools": { + "type": "array", + "items": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + } + }, + "status": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "isSelfHosted": { + "type": "boolean" + }, + "isSystem": { + "type": "boolean" + }, + "spectroClusterUid": { + "type": "string", + "x-omitempty": false + }, + "tenantUid": { + "type": "string" + } + } + }, + "status": { + "description": "Overload status", + "type": "object", + "properties": { + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isReady": { + "type": "boolean", + "x-omitempty": false + }, + "kubectlCommands": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1OverlordMaasAccountCreate": { + "properties": { + "account": { + "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } + } + } + }, + "name": { + "description": "Name for the private gateway \u0026 cloud account", + "type": "string" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordMaasAccountEntity": { + "properties": { + "account": { + "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } + } + } + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordMaasCloudConfig": { + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "clusterSettings": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machineConfig": { + "type": "object", + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "resourcePool": { + "type": "string" + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + } + } + }, + "v1OverlordManifest": { + "description": "overlord manifest", + "type": "object", + "properties": { + "manifest": { + "type": "string" + } + } + }, + "v1OverlordMigrateEntity": { + "properties": { + "sourceUid": { + "type": "string" + }, + "targetUid": { + "type": "string" + } + } + }, + "v1OverlordOpenStackAccountCreate": { + "properties": { + "account": { + "description": "auth-url,project,username,password,domain,cacert etc", + "type": "object", + "required": [ + "identityEndpoint", + "username", + "password" + ], + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + } + }, + "name": { + "description": "Name for the private gateway \u0026 cloud account", + "type": "string" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordOpenStackAccountEntity": { + "properties": { + "account": { + "description": "auth-url,project,username,password,domain,cacert etc", + "type": "object", + "required": [ + "identityEndpoint", + "username", + "password" + ], + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + } + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordOpenStackCloudConfig": { + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "clusterSettings": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machineConfig": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + } + } + }, + "v1OverlordVsphereAccountCreate": { + "properties": { + "account": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "name": { + "description": "Name for the private gateway \u0026 cloud account", + "type": "string" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordVsphereAccountEntity": { + "properties": { + "account": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordVsphereCloudConfig": { + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "clusterSettings": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + } + } + }, + "v1Overlords": { + "description": "Array of Overlords", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Overlord defintiion", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Overload spec", + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string", + "x-omitempty": false + }, + "ipAddress": { + "type": "string" + }, + "ipPools": { + "type": "array", + "items": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + } + }, + "status": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "isSelfHosted": { + "type": "boolean" + }, + "isSystem": { + "type": "boolean" + }, + "spectroClusterUid": { + "type": "string", + "x-omitempty": false + }, + "tenantUid": { + "type": "string" + } + } + }, + "status": { + "description": "Overload status", + "type": "object", + "properties": { + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isReady": { + "type": "boolean", + "x-omitempty": false + }, + "kubectlCommands": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1PackConfig": { + "description": "Pack configuration", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "associatedObject": { + "type": "string" + }, + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "v1PackConfigSpec": { + "type": "object", + "properties": { + "associatedObject": { + "type": "string" + }, + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1PackDependency": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + }, + "v1PackDependencyMeta": { + "description": "Pack dependency metadata", + "type": "object", + "properties": { + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "v1PackEntity": { + "description": "Pack object", + "type": "object", + "required": [ + "uid", + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + }, + "v1PackFilterSpec": { + "description": "Packs filter spec", + "properties": { + "addOnSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "addOnType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "displayName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "environment": { + "description": "Pack supported cloud types", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isFips": { + "description": "isFips compliant", + "type": "boolean" + }, + "layer": { + "description": "Pack layer", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + } + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "source": { + "description": "The source filter describes the creation origin/source of the pack. Ex. source can be \"spectrocloud\" or \"community\"", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "state": { + "description": "Pack state such as deprecated or disabled", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "type": { + "description": "Pack type", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + } + } + } + }, + "v1PackImportEntity": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "v1PackInputEntity": { + "description": "Pack request payload", + "properties": { + "pack": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + } + }, + "v1PackLayer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "v1PackManifestEntity": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + }, + "v1PackManifestImportEntity": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + }, + "v1PackManifestRef": { + "type": "object", + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1PackManifestUpdateEntity": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + }, + "v1PackManifests": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Manifests array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Manifest object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Manifest spec", + "properties": { + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1PackManifestsSpec": { + "description": "Pack manifests spec", + "type": "object", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "v1PackMetadata": { + "description": "Pack metadata object", + "type": "object", + "properties": { + "apiVersion": { + "description": "Pack api version", + "type": "string" + }, + "kind": { + "description": "Pack kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack metadata spec", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registries": { + "description": "Pack registries array", + "type": "array", + "items": { + "description": "Registry metadata information", + "properties": { + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "latestPackUid": { + "description": "Latest pack uid", + "type": "string" + }, + "latestVersion": { + "description": "Pack latest version", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "scope": { + "description": "Pack registry scope", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + } + } + } + } + }, + "v1PackMetadataList": { + "description": "List of packs metadata", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Packs metadata array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack metadata object", + "type": "object", + "properties": { + "apiVersion": { + "description": "Pack api version", + "type": "string" + }, + "kind": { + "description": "Pack kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack metadata spec", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registries": { + "description": "Pack registries array", + "type": "array", + "items": { + "description": "Registry metadata information", + "properties": { + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "latestPackUid": { + "description": "Latest pack uid", + "type": "string" + }, + "latestVersion": { + "description": "Pack latest version", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "scope": { + "description": "Pack registry scope", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1PackMetadataSpec": { + "description": "Pack metadata spec", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registries": { + "description": "Pack registries array", + "type": "array", + "items": { + "description": "Registry metadata information", + "properties": { + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "latestPackUid": { + "description": "Latest pack uid", + "type": "string" + }, + "latestVersion": { + "description": "Pack latest version", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "scope": { + "description": "Pack registry scope", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + } + } + }, + "v1PackParamsEntity": { + "description": "Pack params request payload", + "properties": { + "references": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1PackPreset": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + }, + "v1PackReadme": { + "properties": { + "readme": { + "description": "Readme describes the documentation of the specified pack", + "type": "string" + } + } + }, + "v1PackRef": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "v1PackRefSummary": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1PackRefSummaryResponse": { + "description": "Pack summary response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack summary spec", + "properties": { + "macros": { + "description": "Pack resolved values", + "properties": { + "resolved": { + "description": "Pack resolved values map", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "pack": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "registry": { + "description": "Registry meta", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean", + "x-omitempty": false + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + }, + "v1PackRefSummarySpec": { + "description": "Pack summary spec", + "properties": { + "macros": { + "description": "Pack resolved values", + "properties": { + "resolved": { + "description": "Pack resolved values map", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "pack": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "registry": { + "description": "Registry meta", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean", + "x-omitempty": false + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1PackRegistries": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack registry information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Status of the pack registry", + "type": "object", + "properties": { + "packSyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1PackRegistriesSummary": { + "description": "Pack Registries Summary", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack Registry summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack Registry spec summary", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Pack registry status summary", + "type": "object", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1PackRegistry": { + "description": "Pack registry information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Status of the pack registry", + "type": "object", + "properties": { + "packSyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "v1PackRegistryImportEntity": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "v1PackRegistryMetadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + }, + "v1PackRegistrySpec": { + "description": "Pack registry credentials spec", + "type": "object", + "required": [ + "endpoint", + "auth" + ], + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1PackRegistrySpecSummary": { + "description": "Pack Registry spec summary", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + } + }, + "v1PackRegistryStatus": { + "description": "Status of the pack registry", + "type": "object", + "properties": { + "packSyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + }, + "v1PackRegistryStatusSummary": { + "description": "Pack registry status summary", + "type": "object", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + }, + "v1PackRegistrySummary": { + "description": "Pack Registry summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack Registry spec summary", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + } + }, + "status": { + "description": "Pack registry status summary", + "type": "object", + "properties": { + "sync": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + } + } + } + } + }, + "v1PackResolvedValues": { + "description": "Pack resolved values", + "properties": { + "resolved": { + "description": "Pack resolved values map", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1PackSchema": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1PackSortFields": { + "description": "Packs sort by fields", + "type": "string", + "enum": [ + "name", + "type", + "layer", + "addOnType", + "displayName" + ], + "x-nullable": true + }, + "v1PackSortSpec": { + "description": "Packs sort spec", + "properties": { + "field": { + "description": "Packs sort by fields", + "type": "string", + "enum": [ + "name", + "type", + "layer", + "addOnType", + "displayName" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1PackSummaries": { + "description": "List of packs", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "Packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack summary object", + "type": "object", + "properties": { + "apiVersion": { + "description": "Pack api version", + "type": "string" + }, + "kind": { + "description": "Pack kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1PackSummary": { + "description": "Pack summary object", + "type": "object", + "properties": { + "apiVersion": { + "description": "Pack api version", + "type": "string" + }, + "kind": { + "description": "Pack kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + }, + "v1PackSummarySpec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "v1PackSummaryStatus": { + "description": "Pack status", + "type": "object" + }, + "v1PackTagEntity": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "packValues": { + "description": "Pack values array", + "type": "array", + "items": { + "type": "object", + "properties": { + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "dependencies": { + "description": "Pack dependencies array", + "type": "array", + "items": { + "description": "Pack dependency metadata", + "type": "object", + "properties": { + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "packUid": { + "description": "Pack uid", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "readme": { + "description": "Readme describes the documentation of the specified pack", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters", + "type": "string" + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tags": { + "description": "Pack version tags array", + "type": "array", + "items": { + "type": "object", + "properties": { + "group": { + "description": "Pack group", + "type": "string" + }, + "packUid": { + "description": "Pack uid", + "type": "string" + }, + "parentTags": { + "description": "Pack version parent tags", + "type": "array", + "items": { + "type": "string" + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + } + } + }, + "v1PackTags": { + "type": "object", + "properties": { + "group": { + "description": "Pack group", + "type": "string" + }, + "packUid": { + "description": "Pack uid", + "type": "string" + }, + "parentTags": { + "description": "Pack version parent tags", + "type": "array", + "items": { + "type": "string" + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "v1PackTemplate": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "v1PackTemplateParameter": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + }, + "v1PackTemplateParameterOption": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + }, + "v1PackTemplateParameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "v1PackType": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "v1PackUidValues": { + "type": "object", + "properties": { + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "dependencies": { + "description": "Pack dependencies array", + "type": "array", + "items": { + "description": "Pack dependency metadata", + "type": "object", + "properties": { + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "packUid": { + "description": "Pack uid", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "readme": { + "description": "Readme describes the documentation of the specified pack", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters", + "type": "string" + } + } + }, + "v1PackUpdateEntity": { + "description": "Pack update request payload", + "properties": { + "pack": { + "description": "Pack object", + "type": "object", + "required": [ + "uid", + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + } + }, + "v1PackValuesEntity": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + }, + "v1PacksFilterSpec": { + "description": "Packs filter spec", + "properties": { + "filter": { + "description": "Packs filter spec", + "properties": { + "addOnSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "addOnType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "displayName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "environment": { + "description": "Pack supported cloud types", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isFips": { + "description": "isFips compliant", + "type": "boolean" + }, + "layer": { + "description": "Pack layer", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + } + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "source": { + "description": "The source filter describes the creation origin/source of the pack. Ex. source can be \"spectrocloud\" or \"community\"", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "state": { + "description": "Pack state such as deprecated or disabled", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "type": { + "description": "Pack type", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Packs sort spec", + "properties": { + "field": { + "description": "Packs sort by fields", + "type": "string", + "enum": [ + "name", + "type", + "layer", + "addOnType", + "displayName" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1PairingCode": { + "description": "Pairing code response", + "type": "object", + "properties": { + "pairingCode": { + "type": "string" + } + } + }, + "v1Partition": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + }, + "v1PasswordsBlockListEntity": { + "description": "List of block listed passwords", + "type": "object", + "properties": { + "passwords": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1PaymentIntent": { + "description": "Payment setup object", + "properties": { + "clientSecret": { + "description": "Payment client secret", + "type": "string" + }, + "paymentIntentId": { + "description": "Payment intent id", + "type": "string" + }, + "status": { + "description": "Status of payment intent", + "type": "string" + } + } + }, + "v1PaymentMethod": { + "description": "Payment method object", + "properties": { + "card": { + "description": "Card details object", + "properties": { + "brand": { + "description": "Card brand", + "type": "string" + }, + "country": { + "description": "Country name the card belongs", + "type": "string" + }, + "expYear": { + "description": "Expiry year of the card", + "type": "number", + "format": "uint64" + }, + "fingerPrint": { + "description": "Finger print", + "type": "string" + }, + "funding": { + "description": "Funding", + "type": "string" + }, + "last4": { + "description": "Last 4 digit of the card", + "type": "string" + } + } + }, + "customerId": { + "description": "Customer uid", + "type": "string" + }, + "firstName": { + "description": "First name of the user", + "type": "string" + }, + "lastName": { + "description": "Last name of the user", + "type": "string" + }, + "paymentMethodId": { + "description": "Payment method uid", + "type": "string" + } + } + }, + "v1PaymentMethods": { + "description": "Payment Method list", + "properties": { + "defaultPaymentMethod": { + "description": "Default payment method", + "type": "string" + }, + "paymentMethods": { + "description": "List of payment method", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Payment method object", + "properties": { + "card": { + "description": "Card details object", + "properties": { + "brand": { + "description": "Card brand", + "type": "string" + }, + "country": { + "description": "Country name the card belongs", + "type": "string" + }, + "expYear": { + "description": "Expiry year of the card", + "type": "number", + "format": "uint64" + }, + "fingerPrint": { + "description": "Finger print", + "type": "string" + }, + "funding": { + "description": "Funding", + "type": "string" + }, + "last4": { + "description": "Last 4 digit of the card", + "type": "string" + } + } + }, + "customerId": { + "description": "Customer uid", + "type": "string" + }, + "firstName": { + "description": "First name of the user", + "type": "string" + }, + "lastName": { + "description": "Last name of the user", + "type": "string" + }, + "paymentMethodId": { + "description": "Payment method uid", + "type": "string" + } + } + } + } + } + }, + "v1PaymentPlan": { + "description": "Stripe price detail object", + "properties": { + "billingScheme": { + "description": "Billing scheme", + "type": "string" + }, + "currency": { + "description": "Unit of currency", + "type": "string" + }, + "id": { + "description": "Stripe payment plan id", + "type": "string" + }, + "name": { + "description": "Name of the stripe plan", + "type": "string" + }, + "productId": { + "description": "Product identifier", + "type": "string" + }, + "type": { + "description": "Type of payment plan", + "type": "string" + }, + "unitAmount": { + "description": "Unit amount for the product", + "type": "number", + "format": "int64" + } + } + }, + "v1PaymentPlans": { + "description": "Payment plan object model", + "type": "object", + "required": [ + "stripePlanDetails" + ], + "properties": { + "stripePlanDetails": { + "description": "List of Stripe plan details", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Stripe price detail object", + "properties": { + "billingScheme": { + "description": "Billing scheme", + "type": "string" + }, + "currency": { + "description": "Unit of currency", + "type": "string" + }, + "id": { + "description": "Stripe payment plan id", + "type": "string" + }, + "name": { + "description": "Name of the stripe plan", + "type": "string" + }, + "productId": { + "description": "Product identifier", + "type": "string" + }, + "type": { + "description": "Type of payment plan", + "type": "string" + }, + "unitAmount": { + "description": "Unit amount for the product", + "type": "number", + "format": "int64" + } + } + } + } + } + }, + "v1PaymentSecrets": { + "description": "payment secrets", + "properties": { + "publishableKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1PaymentSubscription": { + "description": "Payment subscription object", + "properties": { + "customerId": { + "description": "Customer uid", + "type": "string" + }, + "paymentIntent": { + "description": "Payment setup object", + "properties": { + "clientSecret": { + "description": "Payment client secret", + "type": "string" + }, + "paymentIntentId": { + "description": "Payment intent id", + "type": "string" + }, + "status": { + "description": "Status of payment intent", + "type": "string" + } + } + }, + "paymentMethodIds": { + "description": "List of payment method uids", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "planType": { + "description": "Plan type", + "type": "string" + }, + "priceId": { + "description": "Price uid", + "type": "string" + }, + "subscriptionId": { + "description": "Subscription uid", + "type": "string" + }, + "subscriptionState": { + "description": "Plan subscription state", + "type": "string" + } + } + }, + "v1PcgSelfHostedParams": { + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1PcgServiceKubectlCommands": { + "description": "Array of kubectl commands", + "type": "object", + "required": [ + "kubectlCommands" + ], + "properties": { + "kubectlCommands": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "overlordUid": { + "type": "string" + } + } + }, + "v1PcgsSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Overlord defintiion", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Overload spec", + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string", + "x-omitempty": false + }, + "ipAddress": { + "type": "string" + }, + "ipPools": { + "type": "array", + "items": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + } + }, + "status": { + "description": "IP Pool status", + "type": "object", + "properties": { + "allottedIps": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "associatedClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "isSelfHosted": { + "type": "boolean" + }, + "isSystem": { + "type": "boolean" + }, + "spectroClusterUid": { + "type": "string", + "x-omitempty": false + }, + "tenantUid": { + "type": "string" + } + } + }, + "status": { + "description": "Overload status", + "type": "object", + "properties": { + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isReady": { + "type": "boolean", + "x-omitempty": false + }, + "kubectlCommands": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1Permission": { + "description": "Permission information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + } + } + }, + "v1Permissions": { + "description": "Array of permissions", + "type": "array", + "items": { + "description": "Permission information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + } + } + } + }, + "v1Plan": { + "description": "Plan", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Plan specifications", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "cost": { + "description": "Plan Cost", + "properties": { + "discount": { + "type": "number", + "format": "float", + "x-omitempty": false + }, + "price": { + "type": "number", + "format": "float", + "x-omitempty": false + } + } + }, + "developerCredits": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "freeCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "renewal": { + "description": "Plan Renewal", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "slaCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tierPricing": { + "description": "tier price", + "properties": { + "alloyPricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + }, + "purePricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "status": { + "type": "object", + "properties": { + "changeLogs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "v1PlanAddFreeCreditUpdate": { + "description": "Plan add free credit update entity", + "properties": { + "credit": { + "description": "Plan Credit entity for create/update request", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + } + }, + "v1PlanAddSlaCreditUpdate": { + "description": "Plan add sla credit update entity", + "properties": { + "credit": { + "description": "Plan Credit entity for create/update request", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + } + }, + "v1PlanChangeUpdate": { + "description": "Plan change update entity", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isPaymentGateway": { + "type": "boolean" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tierPrice": { + "description": "tier price", + "properties": { + "alloyPricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + }, + "purePricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "v1PlanCost": { + "description": "Plan Cost", + "properties": { + "discount": { + "type": "number", + "format": "float", + "x-omitempty": false + }, + "price": { + "type": "number", + "format": "float", + "x-omitempty": false + } + } + }, + "v1PlanCpuCoreHoursUsages": { + "type": "object", + "properties": { + "hourlyUsages": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ResourceUsage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + } + } + }, + "v1PlanCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "v1PlanCreditEntity": { + "description": "Plan Credit entity for create/update request", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "v1PlanCreditUpdate": { + "description": "Plan credit update entity", + "properties": { + "credit": { + "description": "Plan Credit entity for create/update request", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + } + }, + "v1PlanExpiry": { + "description": "Plan expiry", + "required": [ + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1PlanLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "v1PlanLimitSpec": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "v1PlanLimitUpdate": { + "description": "Plan limit change update entity", + "required": [ + "planLimit" + ], + "properties": { + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + } + } + }, + "v1PlanMonthlyUsage": { + "description": "Plan monthly usage entity", + "properties": { + "dailyUsages": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ResourceUsage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "planType": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "planUid": { + "type": "string" + }, + "totalMonthlyUsage": { + "description": "Total Resource Usage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "v1PlanMonthlyUsages": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "description": "Plan monthly usage entity", + "properties": { + "dailyUsages": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ResourceUsage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "planType": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + }, + "planUid": { + "type": "string" + }, + "totalMonthlyUsage": { + "description": "Total Resource Usage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1PlanRenewal": { + "description": "Plan Renewal", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "v1PlanRenewalUpdate": { + "description": "Plan add renawal update entity", + "properties": { + "renewal": { + "description": "Plan Renewal", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + } + } + }, + "v1PlanSpec": { + "description": "Plan specifications", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "cost": { + "description": "Plan Cost", + "properties": { + "discount": { + "type": "number", + "format": "float", + "x-omitempty": false + }, + "price": { + "type": "number", + "format": "float", + "x-omitempty": false + } + } + }, + "developerCredits": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "freeCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "renewal": { + "description": "Plan Renewal", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "slaCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tierPricing": { + "description": "tier price", + "properties": { + "alloyPricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + }, + "purePricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "v1PlanStatus": { + "type": "object", + "properties": { + "changeLogs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Plans": { + "description": "Array of Plans", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Plan", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Plan specifications", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "cost": { + "description": "Plan Cost", + "properties": { + "discount": { + "type": "number", + "format": "float", + "x-omitempty": false + }, + "price": { + "type": "number", + "format": "float", + "x-omitempty": false + } + } + }, + "developerCredits": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "freeCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "renewal": { + "description": "Plan Renewal", + "required": [ + "type", + "start", + "expiry" + ], + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "slaCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tierPricing": { + "description": "tier price", + "properties": { + "alloyPricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + }, + "purePricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ] + } + } + }, + "status": { + "type": "object", + "properties": { + "changeLogs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1PlansUsageComputeSpec": { + "description": "Plans usage compute spec", + "type": "object", + "properties": { + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tenantUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1PodAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "v1Pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + }, + "v1PriceRange": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + }, + "v1PrivateCloudRateConfig": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "v1ProductUsage": { + "description": "Product usage", + "properties": { + "alloyUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pureUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "v1ProfileMetaEntity": { + "description": "Cluster profile metadata request payload", + "type": "object", + "required": [ + "metadata" + ], + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile update spec", + "type": "object", + "properties": { + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + } + } + }, + "v1ProfileResolvedValues": { + "description": "Cluster profile resolved pack values", + "properties": { + "resolved": { + "description": "Cluster profile pack resolved values", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + }, + "v1ProfileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ProfileTemplateSummary": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ProfileType": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + }, + "v1Project": { + "description": "Project information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Project specifications", + "properties": { + "alerts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "component": { + "type": "string" + } + } + } + }, + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isDisabled": { + "type": "boolean" + } + } + } + } + }, + "v1ProjectActiveAppDeployment": { + "description": "Active app deployment", + "type": "object", + "properties": { + "appRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ProjectActiveAppDeployments": { + "description": "Active app deployment", + "type": "object", + "properties": { + "apps": { + "type": "array", + "items": { + "description": "Active app deployment", + "type": "object", + "properties": { + "appRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ProjectActiveCluster": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1ProjectActiveClusters": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ProjectActiveResources": { + "description": "Active project resources", + "type": "object", + "properties": { + "appDeployments": { + "description": "Active app deployment", + "type": "object", + "properties": { + "apps": { + "type": "array", + "items": { + "description": "Active app deployment", + "type": "object", + "properties": { + "appRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "clusters": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "count": { + "type": "integer", + "format": "int32" + } + } + }, + "virtualClusters": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "count": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1ProjectAlertComponent": { + "description": "Project alert component", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "supportedChannels": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1ProjectAlertComponents": { + "description": "Supported project alerts component", + "type": "object", + "properties": { + "components": { + "type": "array", + "items": { + "description": "Project alert component", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "supportedChannels": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1ProjectCleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1ProjectCleanup": { + "description": "Project delete request payload", + "properties": { + "deletingClusterDurationThresholdInMin": { + "type": "integer", + "format": "int32" + }, + "provisioningClusterDurationThresholdInMin": { + "type": "integer", + "format": "int32" + } + } + }, + "v1ProjectClusterSettings": { + "properties": { + "nodesAutoRemediationSetting": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "tenantClusterSettings": { + "properties": { + "nodesAutoRemediationSetting": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ProjectEntity": { + "description": "Project information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Project specifications", + "properties": { + "logoUid": { + "type": "string" + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ProjectEntitySpec": { + "description": "Project specifications", + "properties": { + "logoUid": { + "type": "string" + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + } + } + } + }, + "v1ProjectFilterSortFields": { + "type": "string", + "enum": [ + "name", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1ProjectFilterSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1ProjectFilterSpec": { + "description": "Project filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "v1ProjectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ProjectMetadata": { + "description": "Project metadata", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1ProjectPatch": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + }, + "v1ProjectResourceUsage": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1ProjectRolesEntity": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1ProjectRolesPatch": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "projectUid": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1ProjectSpec": { + "description": "Project specifications", + "properties": { + "alerts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "component": { + "type": "string" + } + } + } + }, + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + } + } + } + }, + "v1ProjectSpecSummary": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1ProjectStatus": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isDisabled": { + "type": "boolean" + } + } + }, + "v1ProjectStatusSummary": { + "description": "Project status summary", + "type": "object", + "properties": { + "clustersHealth": { + "description": "Spectro Clusters health data", + "type": "object", + "properties": { + "errored": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "healthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "running": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "unhealthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "status": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isDisabled": { + "type": "boolean" + } + } + }, + "usage": { + "description": "Project usage summary", + "type": "object", + "properties": { + "alloyCpuCores": { + "type": "number", + "x-omitempty": false + }, + "clusters": { + "type": "array", + "items": { + "description": "Cluster usage summary", + "type": "object", + "properties": { + "cpuCores": { + "type": "number", + "x-omitempty": false + }, + "isAlloy": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "pureCpuCores": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "v1ProjectSummary": { + "description": "Project summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Project status summary", + "type": "object", + "properties": { + "clustersHealth": { + "description": "Spectro Clusters health data", + "type": "object", + "properties": { + "errored": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "healthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "running": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "unhealthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "status": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isDisabled": { + "type": "boolean" + } + } + }, + "usage": { + "description": "Project usage summary", + "type": "object", + "properties": { + "alloyCpuCores": { + "type": "number", + "x-omitempty": false + }, + "clusters": { + "type": "array", + "items": { + "description": "Cluster usage summary", + "type": "object", + "properties": { + "cpuCores": { + "type": "number", + "x-omitempty": false + }, + "isAlloy": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "pureCpuCores": { + "type": "number", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ProjectTeamsEntity": { + "properties": { + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + } + } + } + }, + "v1ProjectUsage": { + "description": "Project usage object", + "properties": { + "alloy": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "pure": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + } + } + }, + "v1ProjectUsageData": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "type": "number", + "format": "float64" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "type": "number", + "format": "float64" + }, + "usedCredits": { + "description": "Project used credits", + "type": "number", + "format": "float64" + } + } + }, + "v1ProjectUsageSummary": { + "description": "Project usage summary", + "type": "object", + "properties": { + "alloyCpuCores": { + "type": "number", + "x-omitempty": false + }, + "clusters": { + "type": "array", + "items": { + "description": "Cluster usage summary", + "type": "object", + "properties": { + "cpuCores": { + "type": "number", + "x-omitempty": false + }, + "isAlloy": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "pureCpuCores": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1ProjectUsersEntity": { + "properties": { + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + } + } + } + }, + "v1Projects": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Project specifications", + "properties": { + "alerts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "type": "object", + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "identifiers": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "type": "object", + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "type": { + "type": "string", + "enum": [ + "email", + "app", + "http" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "component": { + "type": "string" + } + } + } + }, + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isDisabled": { + "type": "boolean" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1ProjectsFilterSpec": { + "description": "Project filter summary spec", + "properties": { + "filter": { + "description": "Project filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1ProjectsMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project metadata", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1ProjectsSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Project status summary", + "type": "object", + "properties": { + "clustersHealth": { + "description": "Spectro Clusters health data", + "type": "object", + "properties": { + "errored": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "healthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "running": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "unhealthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "status": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", + "type": "object", + "properties": { + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isDisabled": { + "type": "boolean" + } + } + }, + "usage": { + "description": "Project usage summary", + "type": "object", + "properties": { + "alloyCpuCores": { + "type": "number", + "x-omitempty": false + }, + "clusters": { + "type": "array", + "items": { + "description": "Cluster usage summary", + "type": "object", + "properties": { + "cpuCores": { + "type": "number", + "x-omitempty": false + }, + "isAlloy": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "pureCpuCores": { + "type": "number", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1ProjectsWorkspaces": { + "description": "List projects and its workspaces", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace users and their roles", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1PublicCloudRateConfig": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "v1RateConfig": { + "description": "Rate config", + "properties": { + "aws": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "azure": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "custom": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Private cloud rate config", + "properties": { + "cloudType": { + "type": "string" + }, + "rateConfig": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + } + }, + "edge": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "edgeNative": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "gcp": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + }, + "memoryOptimized": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "type": "number", + "format": "float" + }, + "memoryRateProportion": { + "type": "number", + "format": "float" + } + } + } + } + }, + "generic": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "libvirt": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "maas": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "openstack": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + }, + "vsphere": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "gpuUnitPricePerHour": { + "type": "number", + "format": "float64" + }, + "memoryUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + }, + "storageUnitPriceGiBPerHour": { + "type": "number", + "format": "float64" + } + } + } + } + }, + "v1RegistriesMetadata": { + "description": "Pack Registries Metadata", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Registry meta", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean", + "x-omitempty": false + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1RegistryAuth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "v1RegistryConf": { + "description": "Registry configuration", + "type": "object", + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + } + } + }, + "v1RegistryConfigEntity": { + "description": "Registry configuration entity", + "type": "object", + "properties": { + "config": { + "description": "Registry configuration", + "type": "object", + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "v1RegistryConfiguration": { + "description": "Registry configuration", + "type": "object", + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1RegistryMetadata": { + "description": "Registry meta", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean", + "x-omitempty": false + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1RegistryPackMetadata": { + "description": "Registry metadata information", + "properties": { + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "latestPackUid": { + "description": "Latest pack uid", + "type": "string" + }, + "latestVersion": { + "description": "Pack latest version", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "scope": { + "description": "Pack registry scope", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + }, + "v1RegistrySyncStatus": { + "description": "Status of the registry sync", + "type": "object", + "properties": { + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSyncedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "v1RelatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ReleaseDescription": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ReleaseVersion": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + }, + "v1ResourceCloudCostSummary": { + "description": "Resource cloud cost summary information", + "type": "object", + "properties": { + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1ResourceConsumption": { + "description": "Resource consumption information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource cosumption data point", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ResourceConsumptionData": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ResourceConsumptionDataPoint": { + "description": "Resource cosumption data point", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1ResourceConsumptionFilter": { + "description": "Resource consumption filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1ResourceConsumptionOptions": { + "description": "Resource consumption options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "namespace", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "cloud" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + }, + "v1ResourceConsumptionSpec": { + "description": "Resource consumption spec", + "type": "object", + "properties": { + "filter": { + "description": "Resource consumption filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Resource consumption options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "namespace", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "cloud" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + } + } + }, + "v1ResourceCost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ResourceCostDataPoint": { + "description": "Resource cost data point", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ResourceCostSummary": { + "description": "Resource cost summary information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource cost data point", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cost information", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1ResourceCostSummaryFilter": { + "description": "Resource cost summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1ResourceCostSummaryOptions": { + "description": "Resource cost summary options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "cloud" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + }, + "v1ResourceCostSummarySpec": { + "description": "Resource cost summary spec", + "type": "object", + "properties": { + "filter": { + "description": "Resource cost summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Resource cost summary options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "cloud" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + } + } + }, + "v1ResourceEntity": { + "type": "object", + "properties": { + "checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "v1ResourceGroup": { + "description": "Azure resource Group is a container that holds related resources for an Azure solution", + "type": "object", + "properties": { + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "The location of the resource group. It cannot be changed after the resource group has been created", + "type": "string" + }, + "name": { + "description": "The type of the resource group", + "type": "string" + } + } + }, + "v1ResourceLimitType": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "v1ResourceReference": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ResourceRoles": { + "type": "object", + "properties": { + "resourceRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1ResourceRolesEntity": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + }, + "v1ResourceRolesUpdateEntity": { + "type": "object", + "properties": { + "filterRefs": { + "type": "array", + "items": { + "type": "string" + } + }, + "projectUids": { + "type": "array", + "items": { + "type": "string" + } + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1ResourceTotalCloudCost": { + "description": "Resource total cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ResourceTotalConsumptionData": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1ResourceTotalCost": { + "description": "Resource total cost information", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1ResourceUsage": { + "description": "ResourceUsage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1ResourceUsageDataPoint": { + "description": "Resource usage data point", + "type": "object", + "properties": { + "baremetal": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "edgehost": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + } + } + }, + "v1ResourceUsageMeteringDataPoint": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "v1ResourceUsageSummary": { + "description": "Resource usage summary information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource usage data point", + "type": "object", + "properties": { + "baremetal": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "edgehost": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1ResourceUsageSummaryFilter": { + "description": "Resource usage summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "pods": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workload": { + "description": "Workload resource filter", + "type": "object", + "properties": { + "names": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "default": "all", + "enum": [ + "deployment", + "statefulset", + "daemonset", + "all" + ] + } + } + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1ResourceUsageSummaryOptions": { + "description": "Resource usage summary options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "statefulset", + "daemonset", + "pod", + "cloud" + ] + }, + "includeMeteringInfo": { + "type": "boolean", + "default": false + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + }, + "v1ResourceUsageSummarySpec": { + "description": "Resource usage summary spec", + "type": "object", + "properties": { + "filter": { + "description": "Resource usage summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "pods": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workload": { + "description": "Workload resource filter", + "type": "object", + "properties": { + "names": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "default": "all", + "enum": [ + "deployment", + "statefulset", + "daemonset", + "all" + ] + } + } + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Resource usage summary options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "statefulset", + "daemonset", + "pod", + "cloud" + ] + }, + "includeMeteringInfo": { + "type": "boolean", + "default": false + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + } + } + }, + "v1ResourceWorkloadFilter": { + "description": "Workload resource filter", + "type": "object", + "properties": { + "names": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "default": "all", + "enum": [ + "deployment", + "statefulset", + "daemonset", + "all" + ] + } + } + }, + "v1Resources": { + "type": "object", + "properties": { + "resources": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + } + } + }, + "v1ResourcesCloudCostSummary": { + "description": "Resources cloud cost summary information", + "type": "object", + "properties": { + "resources": { + "type": "array", + "items": { + "description": "Resource cloud cost summary information", + "type": "object", + "properties": { + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "total": { + "description": "Resource total cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1ResourcesConsumption": { + "description": "Resources consumption information", + "type": "object", + "properties": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "description": "Resource consumption information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource cosumption data point", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "total": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1ResourcesCostSummary": { + "description": "Resources cost summary information", + "type": "object", + "properties": { + "resources": { + "type": "array", + "items": { + "description": "Resource cost summary information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource cost data point", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cost information", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "total": { + "description": "Resource total cost information", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1ResourcesUsageSummary": { + "description": "Resources usage summary information", + "type": "object", + "properties": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "description": "Resource usage summary information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource usage data point", + "type": "object", + "properties": { + "baremetal": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "edgehost": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1RestoreStatusMeta": { + "description": "Restore status meta", + "properties": { + "isSucceeded": { + "type": "boolean" + }, + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1Role": { + "description": "Role", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Role specifications", + "properties": { + "permissions": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + }, + "type": { + "type": "string", + "enum": [ + "system", + "user" + ] + } + } + }, + "status": { + "description": "Role status", + "properties": { + "isEnabled": { + "description": "Specifies if role account is enabled/disabled", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1RoleClone": { + "description": "Role clone specifications", + "properties": { + "metadata": { + "description": "Role clone metadata", + "properties": { + "name": { + "type": "string" + } + } + } + } + }, + "v1RoleCloneMetadata": { + "description": "Role clone metadata", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1RolePatch": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + }, + "v1RoleSpec": { + "description": "Role specifications", + "properties": { + "permissions": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + }, + "type": { + "type": "string", + "enum": [ + "system", + "user" + ] + } + } + }, + "v1RoleStatus": { + "description": "Role status", + "properties": { + "isEnabled": { + "description": "Specifies if role account is enabled/disabled", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1Roles": { + "description": "Array of Roles", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Role", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Role specifications", + "properties": { + "permissions": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + }, + "type": { + "type": "string", + "enum": [ + "system", + "user" + ] + } + } + }, + "status": { + "description": "Role status", + "properties": { + "isEnabled": { + "description": "Specifies if role account is enabled/disabled", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1S3StorageConfig": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "v1SchedulerJob": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cycles": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + } + } + }, + "status": { + "type": "object", + "properties": { + "cycleNumber": { + "type": "integer", + "x-omitempty": false + }, + "error": { + "type": "string", + "x-omitempty": false + }, + "forceNextRun": { + "type": "boolean", + "x-omitempty": false + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isDisabled": { + "type": "boolean", + "x-omitempty": false + }, + "isLocked": { + "type": "boolean", + "x-omitempty": false + }, + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSuccessfulRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "nextRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1SchedulerJobs": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cycles": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + } + } + }, + "status": { + "type": "object", + "properties": { + "cycleNumber": { + "type": "integer", + "x-omitempty": false + }, + "error": { + "type": "string", + "x-omitempty": false + }, + "forceNextRun": { + "type": "boolean", + "x-omitempty": false + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isDisabled": { + "type": "boolean", + "x-omitempty": false + }, + "isLocked": { + "type": "boolean", + "x-omitempty": false + }, + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSuccessfulRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "nextRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "v1SchedulerJobsHealth": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cycles": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + } + } + }, + "status": { + "type": "object", + "properties": { + "cycleNumber": { + "type": "integer", + "x-omitempty": false + }, + "error": { + "type": "string", + "x-omitempty": false + }, + "forceNextRun": { + "type": "boolean", + "x-omitempty": false + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isDisabled": { + "type": "boolean", + "x-omitempty": false + }, + "isLocked": { + "type": "boolean", + "x-omitempty": false + }, + "lastRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSuccessfulRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "nextRunTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "v1Scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + }, + "v1SearchFilterBoolCondition": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "v1SearchFilterCondition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "v1SearchFilterConjunctionOperator": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "v1SearchFilterDateCondition": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "v1SearchFilterDateConditionMatch": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "v1SearchFilterDateOperator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + }, + "v1SearchFilterFloatCondition": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "v1SearchFilterFloatConditionMatch": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "v1SearchFilterGroup": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + } + } + } + }, + "v1SearchFilterIntegerCondition": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "v1SearchFilterIntegerConditionMatch": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "v1SearchFilterIntegerOperator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + }, + "v1SearchFilterItem": { + "properties": { + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + }, + "v1SearchFilterKeyValueCondition": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "v1SearchFilterKeyValueConditionMatch": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1SearchFilterKeyValueOperator": { + "type": "string", + "enum": [ + "eq" + ] + }, + "v1SearchFilterPropertyType": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + }, + "v1SearchFilterSchemaSpec": { + "properties": { + "schema": { + "properties": { + "properties": { + "type": "array", + "items": { + "properties": { + "default": { + "type": "string", + "x-order": 6 + }, + "displayName": { + "type": "string", + "x-order": 2 + }, + "enum": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": true, + "x-order": 4 + }, + "enumValues": { + "type": "array", + "items": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "x-omitempty": true, + "x-order": 5 + }, + "hideDisplay": { + "type": "boolean", + "x-order": 1 + }, + "maxFloatVal": { + "type": "number", + "format": "float64", + "x-order": 10 + }, + "maxIntVal": { + "type": "integer", + "format": "int32", + "x-order": 8 + }, + "minFloatVal": { + "type": "number", + "format": "float64", + "x-order": 9 + }, + "minIntVal": { + "type": "integer", + "format": "int32", + "x-order": 7 + }, + "name": { + "type": "string", + "x-order": 0 + }, + "type": { + "type": "string", + "x-order": 3 + } + } + } + } + } + } + } + }, + "v1SearchFilterSchemaSpecEnumValue": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1SearchFilterSchemaSpecProperties": { + "properties": { + "properties": { + "type": "array", + "items": { + "properties": { + "default": { + "type": "string", + "x-order": 6 + }, + "displayName": { + "type": "string", + "x-order": 2 + }, + "enum": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": true, + "x-order": 4 + }, + "enumValues": { + "type": "array", + "items": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "x-omitempty": true, + "x-order": 5 + }, + "hideDisplay": { + "type": "boolean", + "x-order": 1 + }, + "maxFloatVal": { + "type": "number", + "format": "float64", + "x-order": 10 + }, + "maxIntVal": { + "type": "integer", + "format": "int32", + "x-order": 8 + }, + "minFloatVal": { + "type": "number", + "format": "float64", + "x-order": 9 + }, + "minIntVal": { + "type": "integer", + "format": "int32", + "x-order": 7 + }, + "name": { + "type": "string", + "x-order": 0 + }, + "type": { + "type": "string", + "x-order": 3 + } + } + } + } + } + }, + "v1SearchFilterSchemaSpecProperty": { + "properties": { + "default": { + "type": "string", + "x-order": 6 + }, + "displayName": { + "type": "string", + "x-order": 2 + }, + "enum": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": true, + "x-order": 4 + }, + "enumValues": { + "type": "array", + "items": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "x-omitempty": true, + "x-order": 5 + }, + "hideDisplay": { + "type": "boolean", + "x-order": 1 + }, + "maxFloatVal": { + "type": "number", + "format": "float64", + "x-order": 10 + }, + "maxIntVal": { + "type": "integer", + "format": "int32", + "x-order": 8 + }, + "minFloatVal": { + "type": "number", + "format": "float64", + "x-order": 9 + }, + "minIntVal": { + "type": "integer", + "format": "int32", + "x-order": 7 + }, + "name": { + "type": "string", + "x-order": 0 + }, + "type": { + "type": "string", + "x-order": 3 + } + } + }, + "v1SearchFilterSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1SearchFilterSpec": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filterGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + } + } + } + } + } + } + }, + "v1SearchFilterStringCondition": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "v1SearchFilterStringConditionMatch": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1SearchFilterStringOperator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + }, + "v1SearchFilterSummarySpec": { + "description": "Spectro cluster search filter summary spec", + "properties": { + "filter": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filterGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + } + } + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1SearchSortFields": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1SectroClusterK8sDashboardUrl": { + "description": "Service version information", + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + }, + "v1ServiceEncryptionKey": { + "description": "Returns the data encryption key for the session", + "type": "object", + "properties": { + "encryptionKey": { + "description": "Encryption key to be used to decrypt the encrypted data in the response", + "type": "string" + } + } + }, + "v1ServiceImage": { + "description": "Service image entity", + "type": "object", + "properties": { + "buildId": { + "type": "string" + }, + "image": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ServiceManifest": { + "description": "Service manifest information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "manifests": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "v1ServiceManifestSpec": { + "type": "object", + "properties": { + "manifests": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ServicePort": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + }, + "v1ServiceSpec": { + "description": "ServiceSpec defines the specification of service registering edge", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ServiceVersion": { + "description": "Service version information", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "latestVersion": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" + } + } + }, + "name": { + "type": "string" + } + } + } + } + }, + "v1ServiceVersionSpec": { + "type": "object", + "properties": { + "latestVersion": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" + } + } + }, + "name": { + "type": "string" + } + } + }, + "v1ServicesImages": { + "type": "object", + "properties": { + "serviceImages": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Service image entity", + "type": "object", + "properties": { + "buildId": { + "type": "string" + }, + "image": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1SonobuoyEntity": { + "description": "Sonobuoy response", + "required": [ + "requestUid", + "status", + "reports" + ], + "properties": { + "reports": { + "type": "object", + "additionalProperties": { + "description": "Sonobuoy report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Sonobuoy log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + }, + "v1SonobuoyLog": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1SonobuoyLogEntity": { + "description": "Sonobuoy log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1SonobuoyReport": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "v1SonobuoyReportEntity": { + "description": "Sonobuoy report", + "properties": { + "fail": { + "type": "integer", + "format": "int32" + }, + "logs": { + "type": "array", + "items": { + "description": "Sonobuoy log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "node": { + "type": "string" + }, + "pass": { + "type": "integer", + "format": "int32" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "type": "integer", + "format": "int32" + } + } + }, + "v1SortOrder": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + }, + "v1SpcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "v1SpcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } + }, + "v1SpcPatchTimeEntity": { + "type": "object", + "properties": { + "clusterHash": { + "type": "string" + }, + "patchTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SpectroAppMgmtUpgrade": { + "description": "Spectro application management upgrade information", + "type": "object", + "required": [ + "version" + ], + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile notification update request payload", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + }, + "v1SpectroAwsClusterEntity": { + "description": "AWS cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "clusterType": { + "type": "string", + "default": "PureManage", + "enum": [ + "PureManage", + "PureAttach" + ] + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroAwsClusterImportEntity": { + "description": "Spectro AWS cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroAwsClusterRateEntity": { + "description": "Spectro AWS cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroAzureClusterEntity": { + "description": "Azure cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + } + } + }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroAzureClusterImportEntity": { + "description": "Spectro Azure cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroAzureClusterRateEntity": { + "description": "Spectro Azure cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + } + } + }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroCluster": { + "description": "SpectroCluster is the Schema for the spectroclusters API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SpectroClusterSpec defines the desired state of SpectroCluster", + "type": "object", + "properties": { + "cloudConfigRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "machineHealthConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + } + }, + "clusterProfileTemplates": { + "description": "When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterType": { + "type": "string", + "enum": [ + "PureManage", + "AlloyMonitor", + "AlloyAssist", + "AlloyExtend" + ] + } + } + }, + "status": { + "description": "SpectroClusterStatus", + "type": "object", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { + "description": "Spectro cluster addon service", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterActiveAppDeployment": { + "description": "Active app deployment", + "type": "object", + "properties": { + "appRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1SpectroClusterActiveCluster": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1SpectroClusterActiveResources": { + "description": "Active cluster resources", + "type": "object", + "properties": { + "appDeployments": { + "type": "array", + "items": { + "description": "Active app deployment", + "type": "object", + "properties": { + "appRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "clusters": { + "type": "array", + "items": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + }, + "virtualClusters": { + "type": "array", + "items": { + "description": "Active clusters", + "type": "object", + "properties": { + "clusterRef": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterAddOnService": { + "description": "Spectro cluster addon service", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1SpectroClusterAddOnServiceSummary": { + "description": "Spectro cluster status summary", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1SpectroClusterAssetEntity": { + "description": "Cluster asset", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "frpKubeconfig": { + "type": "string" + }, + "kubeconfig": { + "type": "string" + }, + "kubeconfigclient": { + "type": "string" + }, + "manifest": { + "type": "string" + } + } + } + } + }, + "v1SpectroClusterAssetFrpKubeConfig": { + "description": "Cluster asset Frp Kube Config", + "type": "object", + "properties": { + "frpKubeconfig": { + "type": "string" + } + } + }, + "v1SpectroClusterAssetKubeConfig": { + "description": "Cluster asset Kube Config", + "type": "object", + "properties": { + "kubeconfig": { + "type": "string" + } + } + }, + "v1SpectroClusterAssetKubeConfigClient": { + "description": "Cluster asset Kube Config Client", + "type": "object", + "properties": { + "kubeconfigclient": { + "type": "string" + } + } + }, + "v1SpectroClusterAssetManifest": { + "description": "Cluster asset", + "type": "object", + "properties": { + "manifest": { + "type": "string" + } + } + }, + "v1SpectroClusterCloudCost": { + "description": "Spectro cluster cloud cost information", + "type": "object", + "properties": { + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "data": { + "type": "array", + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "v1SpectroClusterCloudCostSummaryFilter": { + "description": "Spectro cluster cloud cost summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1SpectroClusterCloudCostSummaryOptions": { + "description": "Spectro cluster cloud cost summary options", + "type": "object", + "properties": { + "groupBy": { + "type": "string", + "default": "project", + "enum": [ + "tenant", + "project", + "cloud", + "cluster" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 1440 + } + } + }, + "v1SpectroClusterCloudCostSummarySpec": { + "description": "Spectro cluster cloud cost summary spec", + "type": "object", + "properties": { + "filter": { + "description": "Spectro cluster cloud cost summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Spectro cluster cloud cost summary options", + "type": "object", + "properties": { + "groupBy": { + "type": "string", + "default": "project", + "enum": [ + "tenant", + "project", + "cloud", + "cluster" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 1440 + } + } + } + } + }, + "v1SpectroClusterCost": { + "description": "Spectro cluster cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Spectro cluster cloud cost information", + "type": "object", + "properties": { + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "data": { + "type": "array", + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1SpectroClusterCostSummary": { + "type": "object", + "properties": { + "cluster": { + "description": "Spectro cluster cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Spectro cluster cloud cost information", + "type": "object", + "properties": { + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "data": { + "type": "array", + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "period": { + "type": "integer", + "format": "int32" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SpectroClusterFilterSpec": { + "description": "Spectro cluster filter spec", + "properties": { + "cloudAccounts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "clusterProfiles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "clusterStates": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + } + }, + "cpuUsage": { + "type": "object", + "properties": { + "eq": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "gt": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "gte": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "lt": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "lte": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "ne": { + "type": "integer", + "format": "int32", + "x-nullable": true + } + } + }, + "environment": { + "description": "Deprecated. Use environments", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "environments": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "healthState": { + "type": "string", + "default": "all", + "enum": [ + "all", + "Healthy", + "UnHealthy" + ] + }, + "isDeleted": { + "type": "boolean", + "default": false + }, + "isHostCluster": { + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "memoryUsage": { + "type": "object", + "properties": { + "eq": { + "type": "number", + "x-nullable": true + }, + "gt": { + "type": "number", + "x-nullable": true + }, + "gte": { + "type": "number", + "x-nullable": true + }, + "lt": { + "type": "number", + "x-nullable": true + }, + "lte": { + "type": "number", + "x-nullable": true + }, + "ne": { + "type": "number", + "x-nullable": true + } + } + }, + "metricPeriod": { + "description": "Metric period in minutes defines latest metrics by period", + "type": "integer", + "format": "int32", + "default": 60 + }, + "projectUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + } + } + }, + "v1SpectroClusterHealthCheck": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "ownerName": { + "type": "string" + }, + "ownerUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "status": { + "type": "object", + "properties": { + "machineHealthChecks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "msgBrokerHealthChecks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "spectroClusterHealthChecks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SpectroClusterHealthCheckSpec": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "ownerName": { + "type": "string" + }, + "ownerUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1SpectroClusterHealthCheckStatus": { + "type": "object", + "properties": { + "machineHealthChecks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "msgBrokerHealthChecks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "spectroClusterHealthChecks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterHealthCondition": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + }, + "v1SpectroClusterHealthStatus": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "v1SpectroClusterK8sCertificate": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "type": "object", + "properties": { + "machineCertificates": { + "type": "array", + "items": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "K8 Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterKubeCtlRedirect": { + "description": "Active resources of tenant", + "type": "object", + "properties": { + "redirectUri": { + "type": "string" + } + } + }, + "v1SpectroClusterLocationInputEntity": { + "description": "Cluster location", + "type": "object", + "properties": { + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + } + } + }, + "v1SpectroClusterMetaSummary": { + "description": "Spectro cluster meta summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Spectro cluster meta summary", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + } + }, + "cloudAccountUid": { + "type": "string" + }, + "cloudRegion": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "importMode": { + "type": "string" + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Spectro cluster meta status summary", + "properties": { + "cost": { + "description": "Cluster meta Cost information", + "type": "object", + "properties": { + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Cluster meta health information", + "type": "object", + "properties": { + "isHeartBeatFailed": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "type": "string" + } + } + }, + "state": { + "type": "string" + }, + "updates": { + "description": "Cluster meta updates information", + "type": "object", + "properties": { + "isUpdatesPending": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + }, + "v1SpectroClusterMetadataFilterSpec": { + "description": "Spectro cluster filter spec", + "properties": { + "environment": { + "type": "string" + }, + "includeVirtual": { + "type": "boolean", + "default": false + }, + "isAlloy": { + "description": "isAlloy is renamed to isImported", + "type": "boolean", + "default": false + }, + "isImportReadOnly": { + "type": "boolean", + "default": true + }, + "isImported": { + "type": "boolean", + "default": false + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "state": { + "type": "string" + } + } + }, + "v1SpectroClusterMetadataSpec": { + "description": "Spectro cluster metadata spec", + "properties": { + "filter": { + "description": "Spectro cluster filter spec", + "properties": { + "environment": { + "type": "string" + }, + "includeVirtual": { + "type": "boolean", + "default": false + }, + "isAlloy": { + "description": "isAlloy is renamed to isImported", + "type": "boolean", + "default": false + }, + "isImportReadOnly": { + "type": "boolean", + "default": true + }, + "isImported": { + "type": "boolean", + "default": false + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "state": { + "type": "string" + } + } + }, + "sort": { + "type": "string", + "enum": [ + "environment", + "state", + "name" + ], + "x-nullable": true + } + } + }, + "v1SpectroClusterMetrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroClusterMigration": { + "description": "Spectro cluster migration status", + "type": "object", + "properties": { + "database": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "tenant": { + "description": "Spectro tenant migration status", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroClusterOidcClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SpectroClusterOidcIssuerTlsSpec": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "v1SpectroClusterOidcSpec": { + "type": "object", + "properties": { + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "issuerTls": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + }, + "v1SpectroClusterPackCondition": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ReadyForInstall", + "Installed", + "Ready", + "Error", + "UpgradeAvailable", + "WaitingForOtherLayers" + ] + } + } + }, + "v1SpectroClusterPackConfigList": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack configuration", + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "associatedObject": { + "type": "string" + }, + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SpectroClusterPackDiff": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + }, + "v1SpectroClusterPackProperties": { + "description": "Cluster pack properties response", + "type": "object", + "properties": { + "yaml": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SpectroClusterPackStatusEntity": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ReadyForInstall", + "Installed", + "Ready", + "Error", + "UpgradeAvailable", + "WaitingForOtherLayers" + ] + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "profileUid": { + "description": "Cluster profile uid", + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "v1SpectroClusterPacksEntity": { + "description": "Cluster entity for pack refs validate", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterPacksStatusEntity": { + "type": "object", + "properties": { + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ReadyForInstall", + "Installed", + "Ready", + "Error", + "UpgradeAvailable", + "WaitingForOtherLayers" + ] + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "profileUid": { + "description": "Cluster profile uid", + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterPolicies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterProfile": { + "description": "Cluster profile response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile spec response", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "version": { + "description": "Cluster profile version", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1SpectroClusterProfileEntity": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterProfileList": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile spec response", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "version": { + "description": "Cluster profile version", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "v1SpectroClusterProfileSpec": { + "description": "Cluster profile spec response", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "version": { + "description": "Cluster profile version", + "type": "integer", + "format": "int32" + } + } + }, + "v1SpectroClusterProfileUpdates": { + "type": "object", + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "v1SpectroClusterProfileValidatorResponse": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + }, + "v1SpectroClusterProfiles": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "spcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } + } + } + }, + "v1SpectroClusterProfilesDeleteEntity": { + "type": "object", + "properties": { + "profileUids": { + "description": "Cluster's profile uid list", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1SpectroClusterProfilesPacksManifests": { + "type": "object", + "required": [ + "profiles" + ], + "properties": { + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack manifests spec", + "type": "object", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterProfilesParamReferenceEntity": { + "description": "Cluster profiles param reference entity", + "type": "object", + "properties": { + "references": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1SpectroClusterProfilesResolvedValues": { + "description": "Cluster profiles resolved values response", + "type": "object", + "properties": { + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile resolved pack values", + "properties": { + "resolved": { + "description": "Cluster profile pack resolved values", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterProjectCleanedResource": { + "description": "List of cleaned project spectro cluster resources", + "type": "object", + "properties": { + "resources": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1SpectroClusterProjectCleanupValidateEntity": { + "description": "Cluster duration thresholds", + "type": "object", + "properties": { + "deletingClusterDurationThresholdInMin": { + "type": "integer", + "format": "int32" + }, + "provisioningClusterDurationThresholdInMin": { + "type": "integer", + "format": "int32" + } + } + }, + "v1SpectroClusterRate": { + "description": "Cluster estimated rate information", + "type": "object", + "properties": { + "machinePools": { + "type": "array", + "items": { + "description": "Machine pool estimated rate information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "rate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "resourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterRepave": { + "description": "Spectro cluster repave status information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "reasons": { + "description": "Spectro cluster repave reasons", + "type": "array", + "items": { + "description": "Cluster repave reason description", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + } + }, + "source": { + "type": "string", + "enum": [ + "user", + "hubble", + "palette", + "stylus" + ] + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "status": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "repaveTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + } + } + }, + "v1SpectroClusterRepaveReason": { + "description": "Cluster repave reason description", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + }, + "v1SpectroClusterRepaveSpec": { + "type": "object", + "properties": { + "reasons": { + "description": "Spectro cluster repave reasons", + "type": "array", + "items": { + "description": "Cluster repave reason description", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + } + }, + "source": { + "type": "string", + "enum": [ + "user", + "hubble", + "palette", + "stylus" + ] + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "v1SpectroClusterRepaveStatus": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "repaveTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "v1SpectroClusterRepaveValidationResponse": { + "description": "Cluster repave validation response", + "type": "object", + "properties": { + "isRepaveRequired": { + "description": "If true then the pack changes can cause cluster repave", + "type": "boolean", + "x-omitempty": false + }, + "reasons": { + "type": "array", + "items": { + "description": "Cluster repave reason description", + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "description": "Cluster pack difference", + "type": "object", + "properties": { + "current": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + }, + "diffConfigKeys": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterRevision": { + "description": "Revision specification details for a cluster", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SpectroClusterSpec defines the desired state of SpectroCluster", + "type": "object", + "properties": { + "cloudConfigRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "machineHealthConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + } + }, + "clusterProfileTemplates": { + "description": "When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterType": { + "type": "string", + "enum": [ + "PureManage", + "AlloyMonitor", + "AlloyAssist", + "AlloyExtend" + ] + } + } + } + } + }, + "v1SpectroClusterRevisionMeta": { + "description": "Revision spec uid along with the creationTimestamp for the revision", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "uid": { + "description": "The unique id of the spc revision document", + "type": "string" + } + } + }, + "v1SpectroClusterRevisionMetaList": { + "type": "object", + "properties": { + "spcRevisions": { + "type": "array", + "items": { + "description": "Revision spec uid along with the creationTimestamp for the revision", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "uid": { + "description": "The unique id of the spc revision document", + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterSortFields": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "v1SpectroClusterSortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1SpectroClusterSpec": { + "description": "SpectroClusterSpec defines the desired state of SpectroCluster", + "type": "object", + "properties": { + "cloudConfigRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "machineHealthConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + } + }, + "clusterProfileTemplates": { + "description": "When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterType": { + "type": "string", + "enum": [ + "PureManage", + "AlloyMonitor", + "AlloyAssist", + "AlloyExtend" + ] + } + } + }, + "v1SpectroClusterState": { + "description": "Spectrocluster state entity", + "type": "object", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + } + }, + "v1SpectroClusterStatus": { + "description": "SpectroClusterStatus", + "type": "object", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { + "description": "Spectro cluster addon service", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SpectroClusterStatusEntity": { + "description": "Spectrocluster status entity", + "type": "object", + "properties": { + "status": { + "description": "Spectrocluster state entity", + "type": "object", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + } + } + } + }, + "v1SpectroClusterSummary": { + "description": "Spectro cluster summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Spectro cluster spec summary", + "type": "object", + "properties": { + "archTypes": { + "description": "Architecture type of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudAccountMeta": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + }, + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "state": { + "type": "string" + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1SpectroClusterSummarySpec": { + "description": "Spectro cluster filter summary spec", + "properties": { + "filter": { + "description": "Spectro cluster filter spec", + "properties": { + "cloudAccounts": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "clusterProfiles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "clusterStates": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + } + }, + "cpuUsage": { + "type": "object", + "properties": { + "eq": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "gt": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "gte": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "lt": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "lte": { + "type": "integer", + "format": "int32", + "x-nullable": true + }, + "ne": { + "type": "integer", + "format": "int32", + "x-nullable": true + } + } + }, + "environment": { + "description": "Deprecated. Use environments", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "environments": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "healthState": { + "type": "string", + "default": "all", + "enum": [ + "all", + "Healthy", + "UnHealthy" + ] + }, + "isDeleted": { + "type": "boolean", + "default": false + }, + "isHostCluster": { + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "memoryUsage": { + "type": "object", + "properties": { + "eq": { + "type": "number", + "x-nullable": true + }, + "gt": { + "type": "number", + "x-nullable": true + }, + "gte": { + "type": "number", + "x-nullable": true + }, + "lt": { + "type": "number", + "x-nullable": true + }, + "lte": { + "type": "number", + "x-nullable": true + }, + "ne": { + "type": "number", + "x-nullable": true + } + } + }, + "metricPeriod": { + "description": "Metric period in minutes defines latest metrics by period", + "type": "integer", + "format": "int32", + "default": 60 + }, + "projectUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1SpectroClusterUidStatusSummary": { + "description": "Spectro cluster status summary", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { + "description": "Spectro cluster status summary", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "kubeMeta": { + "description": "Spectro cluster kube meta", + "type": "object", + "properties": { + "hasKubeConfig": { + "type": "boolean", + "x-omitempty": false + }, + "hasKubeConfigClient": { + "type": "boolean", + "x-omitempty": false + }, + "hasManifest": { + "type": "boolean", + "x-omitempty": false + }, + "kubernetesVersion": { + "type": "string" + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "workspaces": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterUidSummary": { + "description": "Spectro cluster summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Spectro cluster spec summary", + "type": "object", + "properties": { + "archTypes": { + "description": "Architecture types of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + } + }, + "cloudaccount": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { + "description": "Spectro cluster status summary", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "kubeMeta": { + "description": "Spectro cluster kube meta", + "type": "object", + "properties": { + "hasKubeConfig": { + "type": "boolean", + "x-omitempty": false + }, + "hasKubeConfigClient": { + "type": "boolean", + "x-omitempty": false + }, + "hasManifest": { + "type": "boolean", + "x-omitempty": false + }, + "kubernetesVersion": { + "type": "string" + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "workspaces": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SpectroClusterUidUpgrades": { + "description": "Cluster status upgrades", + "type": "object", + "properties": { + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "v1SpectroClusterVMCloneEntity": { + "type": "object", + "required": [ + "cloneName" + ], + "properties": { + "annotationFilters": { + "description": "Annotation filters", + "type": "array", + "items": { + "type": "string" + } + }, + "cloneName": { + "description": "Cloning Virtual machine's name", + "type": "string" + }, + "labelFilters": { + "description": "Label filters", + "type": "array", + "items": { + "type": "string" + } + }, + "newMacAddresses": { + "description": "NewMacAddresses manually sets that target interfaces' mac addresses. The key is the interface name and the value is the new mac address. If this field is not specified, a new MAC address will be generated automatically, as for any interface that is not included in this map", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "newSMBiosSerial": { + "description": "NewSMBiosSerial manually sets that target's SMbios serial. If this field is not specified, a new serial will be generated automatically.", + "type": "string" + } + } + }, + "v1SpectroClusterValidatorResponse": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + }, + "v1SpectroClusterVariable": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + }, + "v1SpectroClusters": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "SpectroCluster is the Schema for the spectroclusters API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SpectroClusterSpec defines the desired state of SpectroCluster", + "type": "object", + "properties": { + "cloudConfigRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterResources": { + "type": "object", + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "machineHealthConfig": { + "type": "object", + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + } + }, + "clusterProfileTemplates": { + "description": "When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterType": { + "type": "string", + "enum": [ + "PureManage", + "AlloyMonitor", + "AlloyAssist", + "AlloyExtend" + ] + } + } + }, + "status": { + "description": "SpectroClusterStatus", + "type": "object", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { + "description": "Spectro cluster addon service", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "profileStatus": { + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroClustersAgentsNotifyEntity": { + "description": "SpectroClusters for which agents has to be notified", + "properties": { + "clusterUids": { + "type": "array", + "items": { + "type": "string" + } + }, + "notifyAllClusters": { + "type": "boolean" + } + } + }, + "v1SpectroClustersCostComputeSpec": { + "description": "Cluster's cost compute spec", + "type": "object", + "properties": { + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SpectroClustersHealth": { + "description": "Spectro Clusters health data", + "type": "object", + "properties": { + "errored": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "healthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "running": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "unhealthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "v1SpectroClustersMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + } + } + } + }, + "v1SpectroClustersMetadataSearch": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster meta summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Spectro cluster meta summary", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + } + }, + "cloudAccountUid": { + "type": "string" + }, + "cloudRegion": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "importMode": { + "type": "string" + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Spectro cluster meta status summary", + "properties": { + "cost": { + "description": "Cluster meta Cost information", + "type": "object", + "properties": { + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Cluster meta health information", + "type": "object", + "properties": { + "isHeartBeatFailed": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "type": "string" + } + } + }, + "state": { + "type": "string" + }, + "updates": { + "description": "Cluster meta updates information", + "type": "object", + "properties": { + "isUpdatesPending": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroClustersSummary": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Spectro cluster spec summary", + "type": "object", + "properties": { + "archTypes": { + "description": "Architecture type of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudAccountMeta": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } + }, + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "state": { + "type": "string" + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroClustersUsageComputeSpec": { + "description": "Cluster's usage compute spec", + "type": "object", + "properties": { + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SpectroCustomClusterEntity": { + "description": "Custom cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "clusterType": { + "type": "string", + "default": "PureManage", + "enum": [ + "PureManage", + "PureAttach" + ] + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "values": { + "description": "Machine pool configuration as yaml content", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the custom cluster", + "type": "object", + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroEdgeNativeClusterEntity": { + "description": "EdgeNative cluster create or update request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cloudConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "edgeHosts" + ], + "properties": { + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroEdgeNativeClusterImportEntity": { + "description": "Spectro EdgeNative cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroEdgeNativeClusterRateEntity": { + "description": "Edge-native cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "edgeHosts" + ], + "properties": { + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroEksClusterEntity": { + "description": "Spectro EKS cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "EksClusterConfig defines EKS specific config", + "type": "object", + "required": [ + "region" + ], + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "fargateProfiles": { + "type": "array", + "items": { + "description": "FargateProfile defines the desired state of FargateProfile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "properties": { + "cloudConfig": { + "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroEksClusterRateEntity": { + "description": "Spectro EKS cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "EksClusterConfig defines EKS specific config", + "type": "object", + "required": [ + "region" + ], + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "properties": { + "cloudConfig": { + "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroGcpClusterEntity": { + "description": "GCP cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "project", + "region" + ], + "properties": { + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroGcpClusterImportEntity": { + "description": "Spectro GCP cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroGcpClusterRateEntity": { + "description": "Gcp cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "project", + "region" + ], + "properties": { + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroGenericClusterImportEntity": { + "description": "Spectro generic cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + }, + "edgeConfig": { + "type": "object", + "properties": { + "edgeHostUid": { + "description": "Deprecated. Use 'edgeHostUids' field", + "type": "string" + }, + "edgeHostUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SpectroGenericClusterRateEntity": { + "description": "Generic cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "properties": { + "cloudConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroInstallerEntity": { + "description": "Spectro installer entity for create", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string" + }, + "privateGatewayUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "status": { + "description": "Spectro cluster installer status", + "type": "object", + "properties": { + "clusterMigration": { + "description": "Spectro cluster migration status", + "type": "object", + "properties": { + "database": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "tenant": { + "description": "Spectro tenant migration status", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "clusterState": { + "type": "string" + }, + "endpoint": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroInstallerInputEntity": { + "description": "Spectro installer entity for create", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1SpectroInstallerStatus": { + "description": "spectro installer status", + "type": "object", + "properties": { + "status": { + "description": "Spectro cluster installer status", + "type": "object", + "properties": { + "clusterMigration": { + "description": "Spectro cluster migration status", + "type": "object", + "properties": { + "database": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "tenant": { + "description": "Spectro tenant migration status", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "clusterState": { + "type": "string" + }, + "endpoint": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroInstallers": { + "description": "List Spectro installers", + "type": "object", + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro installer entity for create", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string" + }, + "privateGatewayUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "status": { + "description": "Spectro cluster installer status", + "type": "object", + "properties": { + "clusterMigration": { + "description": "Spectro cluster migration status", + "type": "object", + "properties": { + "database": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "tenant": { + "description": "Spectro tenant migration status", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "clusterState": { + "type": "string" + }, + "endpoint": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1SpectroLibvirtClusterEntity": { + "description": "Libvirt cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Libvirt placement config", + "type": "object", + "required": [ + "hostUid" + ], + "properties": { + "dataStoragePool": { + "type": "string" + }, + "gpuDevices": { + "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostUid": { + "type": "string" + }, + "networks": { + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "type": "string" + }, + "targetStoragePool": { + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "type": "integer", + "format": "int32" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroLibvirtClusterImportEntity": { + "description": "Spectro Libvirt cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroLibvirtClusterRateEntity": { + "description": "libvirt cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string" + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "properties": { + "instanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "type": "object", + "required": [ + "numCPUs", + "memoryInMB" + ], + "properties": { + "cpuPassthroughSpec": { + "type": "object", + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + } + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "type": "integer", + "format": "int32" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "type": "integer", + "format": "int32" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "type": "array", + "items": { + "type": "object", + "required": [ + "sizeInGB" + ], + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "type": "integer", + "format": "int32" + } + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Libvirt placement config", + "type": "object", + "required": [ + "hostUid" + ], + "properties": { + "dataStoragePool": { + "type": "string" + }, + "gpuDevices": { + "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "hostUid": { + "type": "string" + }, + "networks": { + "type": "array", + "items": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "sourceStoragePool": { + "type": "string" + }, + "targetStoragePool": { + "type": "string" + } + } + } + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "type": "integer", + "format": "int32" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroMaasClusterEntity": { + "description": "Spectro Maas cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType", + "resourcePool" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "resourcePool": { + "description": "the resource pool", + "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroMaasClusterImportEntity": { + "description": "Spectro maas cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroMaasClusterRateEntity": { + "description": "Maas cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType", + "resourcePool" + ], + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } + }, + "resourcePool": { + "description": "the resource pool", + "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroMgmt": { + "description": "Spectro management data", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "spectro management specifications", + "properties": { + "installerMode": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "targetVersion": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "status": { + "description": "spectro management status information", + "properties": { + "appVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management app version information", + "properties": { + "intermediateVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + }, + "latestVerson": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "isFailed": { + "type": "boolean", + "x-omitempty": false + }, + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "messageLogs": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + }, + "upgradeHistory": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro management upgrade logs", + "properties": { + "upgradeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SpectroMgmtSpec": { + "description": "spectro management specifications", + "properties": { + "installerMode": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "targetVersion": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SpectroMgmtStatus": { + "description": "spectro management status information", + "properties": { + "appVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management app version information", + "properties": { + "intermediateVersions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + }, + "latestVerson": { + "description": "spectro application management release version information", + "properties": { + "date": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "type": "array", + "items": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "isFailed": { + "type": "boolean", + "x-omitempty": false + }, + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "messageLogs": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + }, + "upgradeHistory": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "spectro management upgrade logs", + "properties": { + "upgradeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "v1SpectroMgmtUpgrade": { + "description": "spectro management upgrade logs", + "properties": { + "upgradeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "version": { + "type": "string" + } + } + }, + "v1SpectroMgmtUpgradePack": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "diffMessage": { + "description": "Spectro application management cluster pack difference message", + "type": "string" + }, + "layer": { + "description": "Spectro application management cluster pack layer type", + "type": "string" + }, + "name": { + "description": "Spectro application management cluster pack name", + "type": "string" + }, + "registryUid": { + "description": "Spectro application management cluster pack registry unique identifier", + "type": "string" + }, + "type": { + "description": "Spectro application management cluster pack type", + "type": "string" + }, + "uid": { + "description": "Spectro application management cluster pack unique identifier", + "type": "string" + }, + "values": { + "description": "Spectro application management cluster pack values", + "type": "string" + }, + "version": { + "description": "Spectro application management cluster pack version", + "type": "string" + } + } + }, + "v1SpectroMgmtUpgradeProfile": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "packs": { + "description": "Spectro application management cluster upgrade packs", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "diffMessage": { + "description": "Spectro application management cluster pack difference message", + "type": "string" + }, + "layer": { + "description": "Spectro application management cluster pack layer type", + "type": "string" + }, + "name": { + "description": "Spectro application management cluster pack name", + "type": "string" + }, + "registryUid": { + "description": "Spectro application management cluster pack registry unique identifier", + "type": "string" + }, + "type": { + "description": "Spectro application management cluster pack type", + "type": "string" + }, + "uid": { + "description": "Spectro application management cluster pack unique identifier", + "type": "string" + }, + "values": { + "description": "Spectro application management cluster pack values", + "type": "string" + }, + "version": { + "description": "Spectro application management cluster pack version", + "type": "string" + } + } + } + }, + "uid": { + "description": "Spectro application management cluster profile unique identifier", + "type": "string" + } + } + }, + "v1SpectroMgmtUpgradeProfiles": { + "description": "Spectro application management cluster information", + "type": "object", + "properties": { + "profiles": { + "description": "Spectro application management cluster profiles", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "packs": { + "description": "Spectro application management cluster upgrade packs", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "diffMessage": { + "description": "Spectro application management cluster pack difference message", + "type": "string" + }, + "layer": { + "description": "Spectro application management cluster pack layer type", + "type": "string" + }, + "name": { + "description": "Spectro application management cluster pack name", + "type": "string" + }, + "registryUid": { + "description": "Spectro application management cluster pack registry unique identifier", + "type": "string" + }, + "type": { + "description": "Spectro application management cluster pack type", + "type": "string" + }, + "uid": { + "description": "Spectro application management cluster pack unique identifier", + "type": "string" + }, + "values": { + "description": "Spectro application management cluster pack values", + "type": "string" + }, + "version": { + "description": "Spectro application management cluster pack version", + "type": "string" + } + } + } + }, + "uid": { + "description": "Spectro application management cluster profile unique identifier", + "type": "string" + } + } + } + }, + "version": { + "description": "Spectro application management cluster version", + "type": "string" + } + } + }, + "v1SpectroMgmtUpgradeSpc": { + "description": "Spectro application management cluster upgrade profiles", + "type": "object", + "properties": { + "current": { + "description": "Spectro application management cluster information", + "type": "object", + "properties": { + "profiles": { + "description": "Spectro application management cluster profiles", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "packs": { + "description": "Spectro application management cluster upgrade packs", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "diffMessage": { + "description": "Spectro application management cluster pack difference message", + "type": "string" + }, + "layer": { + "description": "Spectro application management cluster pack layer type", + "type": "string" + }, + "name": { + "description": "Spectro application management cluster pack name", + "type": "string" + }, + "registryUid": { + "description": "Spectro application management cluster pack registry unique identifier", + "type": "string" + }, + "type": { + "description": "Spectro application management cluster pack type", + "type": "string" + }, + "uid": { + "description": "Spectro application management cluster pack unique identifier", + "type": "string" + }, + "values": { + "description": "Spectro application management cluster pack values", + "type": "string" + }, + "version": { + "description": "Spectro application management cluster pack version", + "type": "string" + } + } + } + }, + "uid": { + "description": "Spectro application management cluster profile unique identifier", + "type": "string" + } + } + } + }, + "version": { + "description": "Spectro application management cluster version", + "type": "string" + } + } + }, + "target": { + "description": "Spectro application management cluster information", + "type": "object", + "properties": { + "profiles": { + "description": "Spectro application management cluster profiles", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "packs": { + "description": "Spectro application management cluster upgrade packs", + "type": "array", + "items": { + "description": "Spectro application management cluster upgrade pack information", + "type": "object", + "properties": { + "diffMessage": { + "description": "Spectro application management cluster pack difference message", + "type": "string" + }, + "layer": { + "description": "Spectro application management cluster pack layer type", + "type": "string" + }, + "name": { + "description": "Spectro application management cluster pack name", + "type": "string" + }, + "registryUid": { + "description": "Spectro application management cluster pack registry unique identifier", + "type": "string" + }, + "type": { + "description": "Spectro application management cluster pack type", + "type": "string" + }, + "uid": { + "description": "Spectro application management cluster pack unique identifier", + "type": "string" + }, + "values": { + "description": "Spectro application management cluster pack values", + "type": "string" + }, + "version": { + "description": "Spectro application management cluster pack version", + "type": "string" + } + } + } + }, + "uid": { + "description": "Spectro application management cluster profile unique identifier", + "type": "string" + } + } + } + }, + "version": { + "description": "Spectro application management cluster version", + "type": "string" + } + } + } + } + }, + "v1SpectroOpenStackClusterEntity": { + "description": "OpenStack cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "Root disk size", + "type": "integer", + "format": "int32" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroOpenStackClusterImportEntity": { + "description": "Spectro OpenStack cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroOpenStackClusterRateEntity": { + "description": "Openstack cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "diskGiB": { + "description": "Root disk size", + "type": "integer", + "format": "int32" + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroTenantClusterMigration": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1SpectroTenantMigration": { + "description": "Spectro tenant migration status", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro tenant cluster migration status", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "state": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SpectroTencentClusterEntity": { + "description": "Tencent cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroTencentClusterRateEntity": { + "description": "Spectro Tencent cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpectroVirtualClusterEntity": { + "description": "Spectro virtual cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "clusterConfig" + ], + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroVsphereClusterEntity": { + "description": "vSphere cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "edgeHostUid": { + "description": "Appliance (Edge Host) uid for Edge env", + "type": "string" + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1SpectroVsphereClusterImportEntity": { + "description": "Spectro Vsphere cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1SpectroVsphereClusterRateEntity": { + "description": "Vsphere cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1SpotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "v1SpotVMOptions": { + "description": "SpotVMOptions defines the options relevant to running the Machine on Spot VMs", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "v1SsoLogin": { + "description": "Describes the allowed sso login details", + "type": "object", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + } + }, + "v1SsoLogins": { + "description": "Describes the allowed sso logins", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Describes the allowed sso login details", + "type": "object", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + } + } + }, + "v1StorageAccount": { + "description": "Azure storage account provides a unique namespace for your Azure resources", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource", + "type": "string" + }, + "kind": { + "description": "The kind of the resource", + "type": "string" + }, + "location": { + "description": "The geo-location where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + } + }, + "v1StorageAccountEntity": { + "description": "Azure storage account entity", + "type": "object", + "properties": { + "id": { + "description": "Azure storage account id", + "type": "string" + }, + "name": { + "description": "Azure storage account name", + "type": "string" + } + } + }, + "v1StorageContainer": { + "description": "Azure storage container organizes a set of blobs, similar to a directory in a file system", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource.", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + }, + "type": { + "description": "The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\"", + "type": "string" + } + } + }, + "v1StorageCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "v1StoragePrice": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + }, + "v1StorageRate": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + }, + "v1StorageType": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + }, + "v1StripeKey": { + "description": "Stripe key object", + "properties": { + "publishKey": { + "description": "Publish stripe key", + "type": "string" + } + } + }, + "v1Subnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "v1Subscription": { + "description": "Azure Subscription Type", + "type": "object", + "properties": { + "authorizationSource": { + "description": "The authorization source of the request. Valid values are one or more combinations of Legacy, RoleBased, Bypassed, Direct and Management", + "type": "string" + }, + "displayName": { + "description": "The subscription display name", + "type": "string" + }, + "state": { + "description": "The subscription state. Possible values are Enabled, Warned, PastDue, Disabled, and Deleted.", + "type": "string" + }, + "subscriptionId": { + "description": "The subscription ID", + "type": "string" + } + } + }, + "v1SyftDependency": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SyftDependencyEntity": { + "description": "Syft dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SyftEntity": { + "description": "Syft response", + "required": [ + "requestUid", + "status", + "report" + ], + "properties": { + "report": { + "description": "Syft report", + "properties": { + "batchNo": { + "type": "integer", + "format": "int32" + }, + "batchSize": { + "type": "integer", + "format": "int32" + }, + "dependencies": { + "type": "array", + "items": { + "description": "Syft dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "sbom": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Syft vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Syft vulnerability summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "requestUid": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ] + } + } + }, + "v1SyftImageContext": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + }, + "v1SyftReport": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1SyftReportEntity": { + "description": "Syft report", + "properties": { + "batchNo": { + "type": "integer", + "format": "int32" + }, + "batchSize": { + "type": "integer", + "format": "int32" + }, + "dependencies": { + "type": "array", + "items": { + "description": "Syft dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "image": { + "type": "string" + }, + "imageContexts": { + "type": "array", + "items": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + } + }, + "sbom": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "vulnerabilities": { + "type": "array", + "items": { + "description": "Syft vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + } + }, + "vulnerabilitySummary": { + "description": "Syft vulnerability summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1SyftScanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1SyftVulnerability": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1SyftVulnerabilityEntity": { + "description": "Syft vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1SyftVulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + }, + "v1SyftVulnerabilitySummaryEntity": { + "description": "Syft vulnerability summary", + "properties": { + "critical": { + "type": "integer", + "format": "int32" + }, + "high": { + "type": "integer", + "format": "int32" + }, + "low": { + "type": "integer", + "format": "int32" + }, + "medium": { + "type": "integer", + "format": "int32" + }, + "negligible": { + "type": "integer", + "format": "int32" + }, + "unknown": { + "type": "integer", + "format": "int32" + } + } + }, + "v1SysLogin": { + "description": "System admin login input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "password": { + "type": "string", + "format": "password" + }, + "username": { + "type": "string" + } + } + }, + "v1SysUserToken": { + "description": "Auth token response", + "type": "object", + "properties": { + "Authorization": { + "type": "string" + }, + "IsEmailSet": { + "type": "boolean", + "x-omitempty": false + }, + "IsEmailVerified": { + "type": "boolean", + "x-omitempty": false + }, + "IsMfa": { + "type": "boolean", + "x-omitempty": false + }, + "IsPasswordReset": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemAdmin": { + "description": "System Admin information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "System Administrator Entity Specification", + "type": "object", + "required": [ + "firstName", + "lastName", + "emailId", + "adminType" + ], + "properties": { + "adminType": { + "type": "string", + "enum": [ + "AccountAdmin", + "OperationAdmin" + ] + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "mfa": { + "description": "System Administrator MFA configuration", + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "System Administrator Status", + "type": "object", + "properties": { + "activation": { + "description": "System Administrator Activation Specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "link": { + "type": "string" + } + } + }, + "createdBy": { + "type": "string" + }, + "lastPasswordUpdate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1SystemAdminActivation": { + "description": "System Administrator Activation Specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "link": { + "type": "string" + } + } + }, + "v1SystemAdminEntity": { + "description": "System Admin information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "System Administrator Entity Specification", + "type": "object", + "required": [ + "firstName", + "lastName", + "emailId", + "adminType" + ], + "properties": { + "adminType": { + "type": "string", + "enum": [ + "AccountAdmin", + "OperationAdmin" + ] + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "mfa": { + "description": "System Administrator MFA configuration", + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1SystemAdminMfa": { + "description": "System Administrator MFA configuration", + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + } + } + }, + "v1SystemAdminProfile": { + "description": "System Administrator Profile Entity", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "System Administrator Profile Specification", + "type": "object", + "properties": { + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + } + } + } + }, + "v1SystemAdminProfileSpec": { + "description": "System Administrator Profile Specification", + "type": "object", + "properties": { + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + } + }, + "v1SystemAdministratorSpec": { + "description": "System Administrator Entity Specification", + "type": "object", + "required": [ + "firstName", + "lastName", + "emailId", + "adminType" + ], + "properties": { + "adminType": { + "type": "string", + "enum": [ + "AccountAdmin", + "OperationAdmin" + ] + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "mfa": { + "description": "System Administrator MFA configuration", + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1SystemAdministratorStatus": { + "description": "System Administrator Status", + "type": "object", + "properties": { + "activation": { + "description": "System Administrator Activation Specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "link": { + "type": "string" + } + } + }, + "createdBy": { + "type": "string" + }, + "lastPasswordUpdate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "v1SystemAdmins": { + "description": "List of System Admin information's", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "System Admin information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "System Administrator Entity Specification", + "type": "object", + "required": [ + "firstName", + "lastName", + "emailId", + "adminType" + ], + "properties": { + "adminType": { + "type": "string", + "enum": [ + "AccountAdmin", + "OperationAdmin" + ] + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "mfa": { + "description": "System Administrator MFA configuration", + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "System Administrator Status", + "type": "object", + "properties": { + "activation": { + "description": "System Administrator Activation Specification", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "link": { + "type": "string" + } + } + }, + "createdBy": { + "type": "string" + }, + "lastPasswordUpdate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1SystemAwsAccount": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system aws account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + } + } + }, + "v1SystemAwsImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system aws account specifications", + "properties": { + "goldenImageRegion": { + "type": "string" + } + } + } + } + }, + "v1SystemAwsImageSpec": { + "description": "system aws account specifications", + "properties": { + "goldenImageRegion": { + "type": "string" + } + } + }, + "v1SystemAwsSpec": { + "description": "system aws account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1SystemAwsStsAccount": { + "description": "System AWS Gov account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "accountId": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1SystemAzureAccount": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system azure account specifications", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + } + } + }, + "v1SystemAzureSpec": { + "description": "system azure account specifications", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "v1SystemAzureStorage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system aws account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "container": { + "type": "string" + }, + "storageName": { + "type": "string" + } + } + } + } + }, + "v1SystemAzureStorageSpec": { + "description": "system aws account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "container": { + "type": "string" + }, + "storageName": { + "type": "string" + } + } + }, + "v1SystemBackupConfigSpec": { + "description": "system backup config spec", + "type": "object", + "properties": { + "ftp": { + "description": "system ftp config spec", + "type": "object", + "properties": { + "dir": { + "type": "string", + "x-omitempty": false + }, + "password": { + "type": "string", + "x-omitempty": false + }, + "server": { + "type": "string", + "x-omitempty": false + }, + "username": { + "type": "string", + "x-omitempty": false + } + } + }, + "hourOfTheDay": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1SystemBackupFtpConfigSpec": { + "description": "system backup config spec", + "type": "object", + "properties": { + "backupSpec": { + "description": "system backup config spec", + "type": "object", + "properties": { + "hourOfTheDay": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + } + }, + "ftp": { + "description": "system ftp config spec", + "type": "object", + "properties": { + "dir": { + "type": "string", + "x-omitempty": false + }, + "password": { + "type": "string", + "x-omitempty": false + }, + "server": { + "type": "string", + "x-omitempty": false + }, + "username": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1SystemBackupS3ConfigSpec": { + "description": "system backup config spec", + "type": "object", + "properties": { + "backupSpec": { + "description": "system backup config spec", + "type": "object", + "properties": { + "hourOfTheDay": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + } + }, + "s3": { + "description": "system backup s3 storage config spec", + "type": "object", + "properties": { + "accessKey": { + "type": "string", + "x-omitempty": false + }, + "bucket": { + "type": "string", + "x-omitempty": false + }, + "folder": { + "type": "string", + "x-omitempty": false + }, + "region": { + "type": "string", + "x-omitempty": false + }, + "secretKey": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1SystemBackupSpec": { + "description": "system backup config spec", + "type": "object", + "properties": { + "hourOfTheDay": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1SystemCertificateSpec": { + "description": "system smtp config spec", + "type": "object", + "properties": { + "caCert": { + "type": "string" + }, + "crt": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "key": { + "type": "string" + } + } + }, + "v1SystemCertificatesSpec": { + "description": "system certificate in base64 format", + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "certificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "keyBase64": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SystemConfigAuth": { + "description": "System config auth", + "properties": { + "enforceServiceAuthToken": { + "type": "boolean", + "x-omitempty": false + }, + "enforceTlsVerify": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemConfigCluster": { + "description": "System config cluster", + "properties": { + "stableEndpointAccess": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemConfigDomainCertificatesSpec": { + "description": "system domain and its certificate config spec", + "type": "object", + "properties": { + "certificates": { + "description": "system certificate in base64 format", + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "certificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "keyBase64": { + "type": "string", + "x-omitempty": false + } + } + }, + "rootDomain": { + "type": "string" + } + } + }, + "v1SystemConfigDomainSpec": { + "description": "system domain config spec", + "type": "object", + "properties": { + "apiServer": { + "type": "string" + }, + "derivedApiServer": { + "type": "string" + }, + "derivedRootDomain": { + "type": "string" + }, + "rootDomain": { + "type": "string" + }, + "urlProtocol": { + "type": "string" + } + } + }, + "v1SystemConfigStoreEntity": { + "type": "object", + "required": [ + "key", + "value" + ], + "properties": { + "key": { + "type": "string", + "x-omitempty": false + }, + "value": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SystemCryptoData": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "input": { + "type": "string" + }, + "result": { + "type": "string" + } + } + }, + "v1SystemCryptoInput": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "input": { + "type": "string" + } + } + }, + "v1SystemEdgeImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system edge account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + } + } + }, + "v1SystemEdgeImageSpec": { + "description": "system edge account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1SystemEdgeNativeImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system edge-native account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "stylusImagesEndpoint": { + "type": "string" + } + } + } + } + }, + "v1SystemEdgeNativeImageSpec": { + "description": "system edge-native account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "stylusImagesEndpoint": { + "type": "string" + } + } + }, + "v1SystemFeature": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + } + } + }, + "v1SystemFeatures": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of system features", + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + } + } + } + } + } + }, + "v1SystemFeaturesOperation": { + "type": "object", + "properties": { + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemFeaturesSpec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + }, + "v1SystemFtpSpec": { + "description": "system ftp config spec", + "type": "object", + "properties": { + "dir": { + "type": "string", + "x-omitempty": false + }, + "password": { + "type": "string", + "x-omitempty": false + }, + "server": { + "type": "string", + "x-omitempty": false + }, + "username": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SystemGcpAccount": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system gcp account specifications", + "properties": { + "json": { + "type": "string" + } + } + } + } + }, + "v1SystemGcpImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system gcp account specifications", + "properties": { + "imageProject": { + "type": "string" + } + } + } + } + }, + "v1SystemGcpImageSpec": { + "description": "system gcp account specifications", + "properties": { + "imageProject": { + "type": "string" + } + } + }, + "v1SystemGcpSpec": { + "description": "system gcp account specifications", + "properties": { + "json": { + "type": "string" + } + } + }, + "v1SystemGitAuthSpec": { + "description": "system git auth account specifications", + "properties": { + "_type": { + "type": "string" + }, + "password": { + "type": "string" + }, + "token": { + "type": "string" + }, + "username": { + "description": "system git auth account specifications", + "properties": { + "_type": { + "type": "string" + }, + "password": { + "type": "string" + }, + "token": { + "type": "string" + }, + "username": { + "$ref": "#/definitions/v1SystemGitAuthSpec" + } + } + } + } + }, + "v1SystemGithubSsoSpec": { + "description": "system sso github config spec", + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecretKey": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SystemKubectlSpec": { + "description": "system web kubectl config spec", + "type": "object", + "properties": { + "endpoint": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + } + } + }, + "v1SystemLibvirtImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system libvirt account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + } + } + }, + "v1SystemLibvirtImageSpec": { + "description": "system libvirt account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1SystemLoggerSpec": { + "description": "system logger config spec", + "type": "object", + "properties": { + "format": { + "type": "string" + }, + "level": { + "type": "string" + } + } + }, + "v1SystemMaasImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system maas account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + } + } + }, + "v1SystemMaasImageSpec": { + "description": "system maas account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1SystemOciImageRegistry": { + "description": "system web kubectl config spec", + "type": "object", + "properties": { + "baseContentPath": { + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "mirrorRegistries": { + "type": "string" + }, + "name": { + "type": "string" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "v1SystemOidcClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SystemOidcClientSpec": { + "description": "system sso oidc config spec", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + }, + "v1SystemOpenstackImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system openstack account specifications", + "properties": { + "imagesHostEndpoint": { + "type": "string" + } + } + } + } + }, + "v1SystemOpenstackImageSpec": { + "description": "system openstack account specifications", + "properties": { + "imagesHostEndpoint": { + "type": "string" + } + } + }, + "v1SystemPasswordPolicySpec": { + "description": "system password policy", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "expiryDurationInDays": { + "type": "integer" + }, + "firstReminderInDays": { + "type": "integer" + }, + "isRegex": { + "type": "boolean" + }, + "minLength": { + "type": "integer" + }, + "minNumOfBlockLetters": { + "type": "integer" + }, + "minNumOfDigits": { + "type": "integer" + }, + "minNumOfSmallLetters": { + "type": "integer" + }, + "minNumOfSpecialCharacters": { + "type": "integer" + }, + "regex": { + "type": "string" + }, + "reminderFrequency": { + "type": "integer" + }, + "updateTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SystemPlan": { + "description": "system plan", + "properties": { + "freeCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "planLimit": { + "description": "System Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "slaCredits": { + "type": "array", + "items": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + } + }, + "systemStartDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SystemPlanCredit": { + "description": "Plan Credit", + "required": [ + "type" + ], + "properties": { + "cpuCoreHours": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "enum": [ + "Pure", + "Alloy" + ] + } + } + }, + "v1SystemPlanLimit": { + "description": "System Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "v1SystemPlanLimitSpec": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "v1SystemPlanLimitUpdate": { + "description": "System Plan limit change update entity", + "properties": { + "planLimit": { + "description": "System Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + } + } + }, + "v1SystemProductUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "v1SystemProxySpec": { + "description": "system proxy config spec", + "type": "object", + "properties": { + "httpProxy": { + "type": "string" + }, + "httpsProxy": { + "type": "string" + }, + "noProxy": { + "type": "string" + } + } + }, + "v1SystemRateLimit": { + "description": "system rate-limit", + "properties": { + "isActive": { + "type": "boolean" + } + } + }, + "v1SystemRegistry": { + "description": "Registry configuration", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Registry configuration", + "type": "object", + "properties": { + "auth": { + "description": "Auth credentials of the registry", + "type": "object", + "properties": { + "password": { + "type": "string", + "format": "password" + }, + "tls": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "token": { + "type": "string", + "format": "password" + }, + "type": { + "type": "string", + "enum": [ + "noAuth", + "basic", + "token" + ] + }, + "username": { + "type": "string" + } + } + }, + "endpoint": { + "type": "string" + } + } + } + } + }, + "v1SystemResourceLimit": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "maxLimit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + }, + "v1SystemResourceLimits": { + "description": "System resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.", + "properties": { + "resources": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "maxLimit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + } + } + } + }, + "v1SystemRetentionPolicy": { + "description": "system retention policy", + "type": "object", + "properties": { + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1SystemReverseProxy": { + "description": "system config reverse proxy", + "properties": { + "caCert": { + "type": "string" + }, + "clientCert": { + "type": "string" + }, + "clientKey": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "protocol": { + "type": "string", + "enum": [ + "http", + "https" + ] + }, + "server": { + "type": "string" + }, + "vHostPort": { + "type": "integer" + } + } + }, + "v1SystemS3Spec": { + "description": "system backup s3 storage config spec", + "type": "object", + "properties": { + "accessKey": { + "type": "string", + "x-omitempty": false + }, + "bucket": { + "type": "string", + "x-omitempty": false + }, + "folder": { + "type": "string", + "x-omitempty": false + }, + "region": { + "type": "string", + "x-omitempty": false + }, + "secretKey": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1SystemScarSpec": { + "description": "system scar config spec", + "type": "object", + "properties": { + "baseContentPath": { + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureVerify": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "v1SystemScarValidationResponse": { + "description": "system proxy config spec", + "type": "object", + "properties": { + "spectroVersion": { + "type": "string" + } + } + }, + "v1SystemSecurityMode": { + "description": "System service mode", + "properties": { + "securityMode": { + "type": "string" + } + } + }, + "v1SystemServiceLogin": { + "description": "System service login input", + "type": "object", + "properties": { + "authToken": { + "description": "authToken helps in two step verification for the authorization.", + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "overlordUid": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1SystemSmtpSpec": { + "description": "system smtp config spec", + "type": "object", + "properties": { + "fromEmailId": { + "type": "string" + }, + "insecureSkipVerifyTls": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "smtpPort": { + "type": "integer" + }, + "smtpServer": { + "type": "string" + }, + "userName": { + "type": "string" + } + } + }, + "v1SystemSsoAuthSpec": { + "description": "system sso config spec", + "type": "object", + "properties": { + "github": { + "description": "system sso github config spec", + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecretKey": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + } + } + }, + "oidcAuthSpecs": { + "type": "object", + "additionalProperties": { + "description": "system sso oidc config spec", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + } + } + }, + "v1SystemSsoSpec": { + "description": "system sso config spec", + "type": "object", + "properties": { + "acsUrlRoot": { + "type": "string" + }, + "acsUrlScheme": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "audienceUrl": { + "type": "string" + }, + "authSpec": { + "description": "system sso config spec", + "type": "object", + "properties": { + "github": { + "description": "system sso github config spec", + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecretKey": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + } + } + }, + "oidcAuthSpecs": { + "type": "object", + "additionalProperties": { + "description": "system sso oidc config spec", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + } + } + }, + "entityId": { + "type": "string" + } + } + }, + "v1SystemStartDate": { + "description": "system start date", + "properties": { + "systemStartDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SystemStorageS3ConfigSpec": { + "description": "system storage s3 config spec", + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "retentionPolicy": { + "description": "system retention policy", + "type": "object", + "properties": { + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + } + }, + "s3": { + "description": "system backup s3 storage config spec", + "type": "object", + "properties": { + "accessKey": { + "type": "string", + "x-omitempty": false + }, + "bucket": { + "type": "string", + "x-omitempty": false + }, + "folder": { + "type": "string", + "x-omitempty": false + }, + "region": { + "type": "string", + "x-omitempty": false + }, + "secretKey": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1SystemTencentAccount": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system tencent account specifications", + "properties": { + "secretId": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + } + } + }, + "v1SystemTencentSpec": { + "description": "system tencent account specifications", + "properties": { + "secretId": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1SystemTimeseriesMetrics": { + "description": "system timeseries metrics config", + "type": "object", + "properties": { + "archivalInterval": { + "type": "integer" + }, + "batchInterval": { + "type": "integer" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer" + } + } + }, + "v1SystemTimeseriesSpec": { + "description": "system timeseries config spec", + "type": "object", + "properties": { + "machine": { + "description": "system timeseries metrics config", + "type": "object", + "properties": { + "archivalInterval": { + "type": "integer" + }, + "batchInterval": { + "type": "integer" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer" + } + } + }, + "pod": { + "description": "system timeseries metrics config", + "type": "object", + "properties": { + "archivalInterval": { + "type": "integer" + }, + "batchInterval": { + "type": "integer" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer" + } + } + } + } + }, + "v1SystemUsage": { + "description": "System usage billing object", + "properties": { + "planLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "overageLimitPercentage": { + "description": "overage limit in percentage", + "type": "integer", + "format": "int8", + "default": 25, + "x-omitempty": false + }, + "warnLimitPercentage": { + "description": "warning limit in percentage", + "type": "integer", + "format": "int8", + "default": 90, + "x-omitempty": false + } + } + } + } + }, + "usageBillingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "yearlyUsages": { + "description": "List of every year system usage", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Yearly usage object", + "properties": { + "billingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "monthlyUsages": { + "description": "List of monthly usages", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Monthly usage object", + "properties": { + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tenantUsages": { + "description": "List of tenants usage", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Tenant usage object", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "description": "Tenant uid", + "type": "string" + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + } + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + } + }, + "productUsages": { + "description": "Product usage", + "properties": { + "alloyUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pureUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + } + } + } + }, + "v1SystemUserMe": { + "description": "User information wrt permissions", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User specifications", + "properties": { + "adminType": { + "description": "Admin type", + "type": "string" + }, + "emailId": { + "description": "System User's email id", + "type": "string" + } + } + }, + "status": { + "description": "User status with permissions", + "properties": { + "isEmailSet": { + "type": "boolean", + "x-omitempty": false + }, + "isEmailVerified": { + "type": "boolean", + "x-omitempty": false + }, + "isMfaEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "isPasswordReset": { + "type": "boolean", + "x-omitempty": false + }, + "lastEmailUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastEmailVerifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastLoginTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastPasswordUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1SystemUserMeStatus": { + "description": "User status with permissions", + "properties": { + "isEmailSet": { + "type": "boolean", + "x-omitempty": false + }, + "isEmailVerified": { + "type": "boolean", + "x-omitempty": false + }, + "isMfaEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "isPasswordReset": { + "type": "boolean", + "x-omitempty": false + }, + "lastEmailUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastEmailVerifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastLoginTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastPasswordUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1SystemUserSpec": { + "description": "User specifications", + "properties": { + "adminType": { + "description": "Admin type", + "type": "string" + }, + "emailId": { + "description": "System User's email id", + "type": "string" + } + } + }, + "v1SystemVersionInfo": { + "description": "system version info", + "type": "object", + "properties": { + "version": { + "type": "string" + } + } + }, + "v1SystemVsphereImage": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "spec": { + "description": "system vsphere account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "overlordOvaLocation": { + "type": "string" + } + } + } + } + }, + "v1SystemVsphereImageSpec": { + "description": "system vsphere account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "overlordOvaLocation": { + "type": "string" + } + } + }, + "v1TagFilter": { + "description": "Tag Filter create spec", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Filter create spec", + "type": "object", + "properties": { + "filterGroup": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "key": { + "type": "string" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq" + ] + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1TagFilterGroup": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "key": { + "type": "string" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq" + ] + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1TagFilterItem": { + "properties": { + "key": { + "type": "string" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq" + ] + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1TagFilterSpec": { + "description": "Filter create spec", + "type": "object", + "properties": { + "filterGroup": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "key": { + "type": "string" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq" + ] + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1TagFilterSummary": { + "description": "Filter summary object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Filter create spec", + "type": "object", + "properties": { + "filterGroup": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "key": { + "type": "string" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq" + ] + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1Taint": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + }, + "v1Team": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + }, + "v1TeamPatch": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + }, + "v1TeamRoleMap": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "teamId": { + "type": "string" + } + } + }, + "v1TeamSpec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1TeamSpecSummary": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1TeamStatus": { + "description": "Team status", + "type": "object" + }, + "v1TeamSummary": { + "description": "Team summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + }, + "v1TeamSummarySortFields": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "v1TeamSummarySortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1TeamTenantRolesEntity": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1TeamTenantRolesUpdate": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Teams": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1TeamsBatch": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Team information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Team specifications", + "properties": { + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + }, + "v1TeamsFilterSpec": { + "description": "Teams filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "v1TeamsMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1TeamsSummary": { + "description": "Deprecated, Use v1UsersSummaryList - Returns User summary", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Team summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1TeamsSummaryList": { + "description": "Returns Team summary", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Team summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Team status", + "type": "object" + } + } + } + } + } + }, + "v1TeamsSummarySpec": { + "description": "Teams filter summary spec", + "properties": { + "filter": { + "description": "Teams filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1Tenant": { + "description": "Tenant", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Tenant Spec", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "authType": { + "type": "string" + }, + "defaultLoginMode": { + "type": "string" + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "planUid": { + "type": "string" + } + } + }, + "status": { + "description": "Tenant Status", + "type": "object", + "properties": { + "cleanUpStatus": { + "description": "Tenant CleanUp Status", + "type": "object", + "properties": { + "cleanUpError": { + "type": "string" + }, + "cleanUpStages": { + "type": "string" + }, + "cleanUpTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "isInProgress": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "toBeDeleted": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1TenantActivate": { + "description": "Activate/Deactivate tenant", + "type": "object", + "properties": { + "isActive": { + "type": "boolean", + "default": true + } + } + }, + "v1TenantActivity": { + "description": "Active tenant and clusters data", + "type": "object", + "properties": { + "clustersInfo": { + "description": "Active clusters information", + "type": "object", + "properties": { + "clustersMeta": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Active cluster meta", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "duration": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectName": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "totalActiveClusters": { + "type": "number", + "format": "int64" + }, + "totalActiveGreenFieldClusters": { + "type": "number", + "format": "int64" + }, + "totalActiveImportedClusters": { + "type": "number", + "format": "int64" + }, + "totalClustersDeleted": { + "type": "number", + "format": "int64" + }, + "totalClustersDeployed": { + "type": "number", + "format": "int64" + } + } + }, + "org": { + "type": "string" + }, + "planType": { + "type": "string" + }, + "totalProjects": { + "type": "number", + "format": "int64" + }, + "totalUsers": { + "type": "number", + "format": "int64" + }, + "uid": { + "type": "string" + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Active user data", + "type": "object", + "properties": { + "lastLogin": { + "type": "string" + }, + "lastLoginTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1TenantAddressPatch": { + "description": "Tenant Address", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + }, + "v1TenantAssetCert": { + "description": "tenant cert", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + }, + "v1TenantAssetCerts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tenant cert", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "v1TenantBasicEntity": { + "description": "Tenant Basic param", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "orgName": { + "type": "string" + } + } + }, + "v1TenantCleanUpStatus": { + "description": "Tenant CleanUp Status", + "type": "object", + "properties": { + "cleanUpError": { + "type": "string" + }, + "cleanUpStages": { + "type": "string" + }, + "cleanUpTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "isInProgress": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1TenantClusterSettings": { + "properties": { + "nodesAutoRemediationSetting": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1TenantContractSpec": { + "description": "Tenant contract settings", + "type": "object", + "required": [ + "isRequired", + "isAccepted" + ], + "properties": { + "acceptedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "isAccepted": { + "description": "If the contract is accepted offline, then set this field to true", + "type": "boolean" + }, + "isRequired": { + "description": "Is the contract required, for on-prem installation it will be false", + "type": "boolean" + } + } + }, + "v1TenantDomains": { + "description": "Tenant domains", + "type": "object", + "properties": { + "domains": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1TenantEmailPatch": { + "description": "Tenant EmailId", + "type": "object", + "properties": { + "emailId": { + "type": "string" + } + } + }, + "v1TenantEnableClusterGroup": { + "description": "Enable or Disable cluster group for a tenant", + "properties": { + "hideSystemClusterGroups": { + "type": "boolean", + "x-omitempty": false + }, + "isClusterGroupEnabled": { + "description": "Deprecated. Use hideSystemClusterGroups field", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1TenantEntity": { + "description": "Tenant Entity", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Tenant Entity input", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "authType": { + "type": "string" + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string", + "default": "devops", + "enum": [ + "dev", + "devops" + ] + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ssoApp": { + "type": "string" + } + } + } + } + }, + "v1TenantFreemium": { + "description": "Tenant freemium configuration", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "totalUsageLimit": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1TenantFreemiumUsage": { + "type": "object", + "properties": { + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "limit": { + "type": "object", + "properties": { + "activeClusters": { + "type": "integer", + "x-omitempty": false + }, + "overageUsage": { + "type": "number", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "type": "object", + "properties": { + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + }, + "v1TenantOidcClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1TenantOidcClientSpec": { + "description": "Tenant", + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerTls": { + "type": "object", + "properties": { + "caCertificateBase64": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoutUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "type": "object", + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + } + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "scopesDelimiter": { + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1TenantPasswordPolicyEntity": { + "description": "Tenant Password Policy Entity", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "expiryDurationInDays": { + "type": "integer" + }, + "firstReminderInDays": { + "type": "integer" + }, + "isRegex": { + "type": "boolean" + }, + "minLength": { + "type": "integer" + }, + "minNumOfBlockLetters": { + "type": "integer" + }, + "minNumOfDigits": { + "type": "integer" + }, + "minNumOfSmallLetters": { + "type": "integer" + }, + "minNumOfSpecialCharacters": { + "type": "integer" + }, + "regex": { + "type": "string" + }, + "updateTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1TenantResourceLimit": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "label": { + "type": "string" + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "maxLimit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + }, + "v1TenantResourceLimitEntity": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + }, + "v1TenantResourceLimits": { + "description": "Tenant resource limits", + "properties": { + "resources": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "label": { + "type": "string" + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + }, + "maxLimit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + } + } + } + }, + "v1TenantResourceLimitsEntity": { + "description": "Tenant resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.", + "properties": { + "resources": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "kind": { + "type": "string", + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ] + }, + "limit": { + "type": "number", + "format": "int64", + "x-omitempty": false + } + } + } + } + } + }, + "v1TenantSamlRequestSpec": { + "description": "Tenant", + "type": "object", + "properties": { + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attributeValue": { + "type": "string" + }, + "mappedAttribute": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameFormat": { + "type": "string" + } + } + } + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + } + }, + "federationMetadata": { + "type": "string" + }, + "identityProvider": { + "type": "string" + }, + "isSingleLogoutEnabled": { + "type": "boolean" + }, + "isSsoEnabled": { + "type": "boolean" + }, + "nameIdFormat": { + "type": "string" + }, + "syncSsoTeams": { + "type": "boolean" + } + } + }, + "v1TenantSamlSpec": { + "description": "Tenant", + "type": "object", + "properties": { + "acsUrl": { + "type": "string" + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "attributeValue": { + "type": "string" + }, + "mappedAttribute": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameFormat": { + "type": "string" + } + } + } + }, + "audienceUrl": { + "description": "same as entity id", + "type": "string" + }, + "certificate": { + "description": "certificate for slo", + "type": "string" + }, + "defaultTeams": { + "type": "array", + "items": { + "type": "string" + } + }, + "entityId": { + "type": "string" + }, + "federationMetadata": { + "type": "string" + }, + "identityProvider": { + "type": "string" + }, + "isSingleLogoutEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuer": { + "description": "same as entity id", + "type": "string" + }, + "nameIdFormat": { + "type": "string" + }, + "serviceProviderMetadata": { + "type": "string" + }, + "singleLogoutUrl": { + "description": "slo url", + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1TenantSamlSpecAttribute": { + "type": "object", + "properties": { + "attributeValue": { + "type": "string" + }, + "mappedAttribute": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameFormat": { + "type": "string" + } + } + }, + "v1TenantSelfSignUpSpec": { + "description": "Tenant sign up data", + "type": "object", + "required": [ + "firstName", + "lastName", + "emailId", + "orgName" + ], + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string", + "default": "devops", + "enum": [ + "dev", + "devops" + ] + }, + "notifyTenantAdmin": { + "type": "boolean" + }, + "orgName": { + "type": "string" + } + } + }, + "v1TenantSpec": { + "description": "Tenant Spec", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "authType": { + "type": "string" + }, + "defaultLoginMode": { + "type": "string" + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "planUid": { + "type": "string" + } + } + }, + "v1TenantSpecEntity": { + "description": "Tenant Entity input", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "authType": { + "type": "string" + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string", + "default": "devops", + "enum": [ + "dev", + "devops" + ] + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "ssoApp": { + "type": "string" + } + } + }, + "v1TenantSsoAuthProvidersEntity": { + "type": "object", + "properties": { + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "ssoLogins": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1TenantStatus": { + "description": "Tenant Status", + "type": "object", + "properties": { + "cleanUpStatus": { + "description": "Tenant CleanUp Status", + "type": "object", + "properties": { + "cleanUpError": { + "type": "string" + }, + "cleanUpStages": { + "type": "string" + }, + "cleanUpTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "isInProgress": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "toBeDeleted": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1TenantUpgradeSettingsEntity": { + "properties": { + "enableLock": { + "type": "boolean", + "x-omitempty": false + }, + "supportedVersionsRange": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1TenantUsage": { + "description": "Tenant usage object", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "description": "Tenant uid", + "type": "string" + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + }, + "v1Tenants": { + "description": "Tenants list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Tenant", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Tenant Spec", + "type": "object", + "properties": { + "address": { + "description": "Tenant Address", + "type": "object", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "authType": { + "type": "string" + }, + "defaultLoginMode": { + "type": "string" + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "planUid": { + "type": "string" + } + } + }, + "status": { + "description": "Tenant Status", + "type": "object", + "properties": { + "cleanUpStatus": { + "description": "Tenant CleanUp Status", + "type": "object", + "properties": { + "cleanUpError": { + "type": "string" + }, + "cleanUpStages": { + "type": "string" + }, + "cleanUpTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "isInProgress": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "toBeDeleted": { + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1TenantsAccountsNas": { + "type": "object", + "properties": { + "failures": { + "type": "array", + "items": { + "type": "string" + } + }, + "success": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1TenantsActivities": { + "description": "Active tenants and clusters data", + "type": "object", + "properties": { + "tenants": { + "type": "object", + "additionalProperties": { + "description": "Active tenant and clusters data", + "type": "object", + "properties": { + "clustersInfo": { + "description": "Active clusters information", + "type": "object", + "properties": { + "clustersMeta": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Active cluster meta", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "duration": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectName": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ] + }, + "uid": { + "type": "string" + } + } + } + }, + "totalActiveClusters": { + "type": "number", + "format": "int64" + }, + "totalActiveGreenFieldClusters": { + "type": "number", + "format": "int64" + }, + "totalActiveImportedClusters": { + "type": "number", + "format": "int64" + }, + "totalClustersDeleted": { + "type": "number", + "format": "int64" + }, + "totalClustersDeployed": { + "type": "number", + "format": "int64" + } + } + }, + "org": { + "type": "string" + }, + "planType": { + "type": "string" + }, + "totalProjects": { + "type": "number", + "format": "int64" + }, + "totalUsers": { + "type": "number", + "format": "int64" + }, + "uid": { + "type": "string" + }, + "users": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Active user data", + "type": "object", + "properties": { + "lastLogin": { + "type": "string" + }, + "lastLoginTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1TencentAccount": { + "description": "Tencent cloud account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "secretId", + "secretKey" + ], + "properties": { + "secretId": { + "description": "Tencent api secretID", + "type": "string" + }, + "secretKey": { + "description": "Tencent api secret key", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1TencentAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Tencent cloud account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "secretId", + "secretKey" + ], + "properties": { + "secretId": { + "description": "Tencent api secretID", + "type": "string" + }, + "secretKey": { + "description": "Tencent api secret key", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1TencentAvailabilityZone": { + "description": "Tencent availability zone", + "type": "object", + "properties": { + "name": { + "description": "Tencent availability zone name", + "type": "string" + }, + "state": { + "description": "Tencent availability zone state", + "type": "string" + }, + "zoneId": { + "description": "Tencent availability zone id", + "type": "string" + } + } + }, + "v1TencentAvailabilityZones": { + "description": "List of Tencent Availability zones", + "type": "object", + "required": [ + "zones" + ], + "properties": { + "zones": { + "type": "array", + "items": { + "description": "Tencent availability zone", + "type": "object", + "properties": { + "name": { + "description": "Tencent availability zone name", + "type": "string" + }, + "state": { + "description": "Tencent availability zone state", + "type": "string" + }, + "zoneId": { + "description": "Tencent availability zone id", + "type": "string" + } + } + } + } + } + }, + "v1TencentCloudAccount": { + "type": "object", + "required": [ + "secretId", + "secretKey" + ], + "properties": { + "secretId": { + "description": "Tencent api secretID", + "type": "string" + }, + "secretKey": { + "description": "Tencent api secret key", + "type": "string" + } + } + }, + "v1TencentCloudClusterConfigEntity": { + "description": "Tencent cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + } + } + }, + "v1TencentCloudConfig": { + "description": "TencentCloudConfig is the Schema for the tencentcloudconfigs API", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "TencentCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + } + } + }, + "v1TencentCloudConfigSpec": { + "description": "TencentCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "type": "object", + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1TencentClusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "v1TencentInstanceTypes": { + "description": "List of Tencent instance types", + "type": "object", + "properties": { + "instanceTypes": { + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + } + } + }, + "v1TencentKeypair": { + "description": "Tencent Keypair entity", + "type": "object", + "properties": { + "id": { + "description": "Tencent keypair id", + "type": "string" + }, + "name": { + "description": "Tencent keypair name", + "type": "string" + }, + "publickey": { + "description": "Tencent public key", + "type": "string" + } + } + }, + "v1TencentKeypairs": { + "description": "List of Tencent keypairs", + "type": "object", + "properties": { + "keypairs": { + "type": "array", + "items": { + "description": "Tencent Keypair entity", + "type": "object", + "properties": { + "id": { + "description": "Tencent keypair id", + "type": "string" + }, + "name": { + "description": "Tencent keypair name", + "type": "string" + }, + "publickey": { + "description": "Tencent public key", + "type": "string" + } + } + } + } + } + }, + "v1TencentMachine": { + "description": "Tencent cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Tencent cloud VM definition spec", + "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], + "properties": { + "dnsName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "Tencent network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1TencentMachinePoolCloudConfigEntity": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1TencentMachinePoolConfig": { + "type": "object", + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1TencentMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1TencentMachineSpec": { + "description": "Tencent cloud VM definition spec", + "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], + "properties": { + "dnsName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "Tencent network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { + "type": "string" + } + } + }, + "v1TencentMachines": { + "description": "Tencent machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Tencent cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Tencent cloud VM definition spec", + "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], + "properties": { + "dnsName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "type": "array", + "items": { + "description": "Tencent network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + } + }, + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1TencentNic": { + "description": "Tencent network interface", + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" + } + } + }, + "v1TencentRegion": { + "description": "Tencent region entity", + "type": "object", + "properties": { + "name": { + "description": "Name of tencent region", + "type": "string" + }, + "state": { + "description": "State of tencent region", + "type": "string" + } + } + }, + "v1TencentRegions": { + "description": "List of tencent regions", + "type": "object", + "required": [ + "regions" + ], + "properties": { + "regions": { + "description": "Tencent regions entity", + "type": "array", + "items": { + "description": "Tencent region entity", + "type": "object", + "properties": { + "name": { + "description": "Name of tencent region", + "type": "string" + }, + "state": { + "description": "State of tencent region", + "type": "string" + } + } + } + } + } + }, + "v1TencentSecurityGroup": { + "description": "Tencent Security Group. A security group is a virtual firewall that features stateful data packet filtering", + "type": "object", + "properties": { + "id": { + "description": "Tencent security group id", + "type": "string" + }, + "isDefault": { + "description": "Whether it is the default security group, the default security group does not support deletion.", + "type": "boolean" + }, + "name": { + "description": "Tencent security group name", + "type": "string" + }, + "projectId": { + "description": "Tencent security group associated to a project", + "type": "string" + } + } + }, + "v1TencentSecurityGroups": { + "description": "List of Tencent security groups", + "type": "object", + "properties": { + "groups": { + "type": "array", + "items": { + "description": "Tencent Security Group. A security group is a virtual firewall that features stateful data packet filtering", + "type": "object", + "properties": { + "id": { + "description": "Tencent security group id", + "type": "string" + }, + "isDefault": { + "description": "Whether it is the default security group, the default security group does not support deletion.", + "type": "boolean" + }, + "name": { + "description": "Tencent security group name", + "type": "string" + }, + "projectId": { + "description": "Tencent security group associated to a project", + "type": "string" + } + } + } + } + } + }, + "v1TencentStorageTypes": { + "description": "List of Tencent storage types", + "type": "object", + "properties": { + "storageTypes": { + "type": "array", + "items": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "v1TencentSubnet": { + "description": "Tencent Subnet entity", + "type": "object", + "properties": { + "az": { + "description": "Availability zone associated with tencent subnet", + "type": "string" + }, + "cidrBlock": { + "description": "Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent subnet name", + "type": "string" + }, + "subnetId": { + "description": "Tencent subnet id", + "type": "string" + } + } + }, + "v1TencentVpc": { + "description": "Tencent VPC entity", + "type": "object", + "required": [ + "vpcId" + ], + "properties": { + "cidrBlock": { + "description": "Tencent VPC CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent VPC name", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "description": "Tencent Subnet entity", + "type": "object", + "properties": { + "az": { + "description": "Availability zone associated with tencent subnet", + "type": "string" + }, + "cidrBlock": { + "description": "Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent subnet name", + "type": "string" + }, + "subnetId": { + "description": "Tencent subnet id", + "type": "string" + } + } + } + }, + "vpcId": { + "description": "Tencent VPC id", + "type": "string" + } + } + }, + "v1TencentVpcs": { + "description": "List of Tencent VPCs", + "type": "object", + "required": [ + "vpcs" + ], + "properties": { + "vpcs": { + "type": "array", + "items": { + "description": "Tencent VPC entity", + "type": "object", + "required": [ + "vpcId" + ], + "properties": { + "cidrBlock": { + "description": "Tencent VPC CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent VPC name", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "description": "Tencent Subnet entity", + "type": "object", + "properties": { + "az": { + "description": "Availability zone associated with tencent subnet", + "type": "string" + }, + "cidrBlock": { + "description": "Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent subnet name", + "type": "string" + }, + "subnetId": { + "description": "Tencent subnet id", + "type": "string" + } + } + } + }, + "vpcId": { + "description": "Tencent VPC id", + "type": "string" + } + } + } + } + } + }, + "v1TierPrice": { + "description": "tier price", + "properties": { + "alloyPricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + }, + "purePricing": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "tier price range", + "properties": { + "discount": { + "type": "number", + "format": "int64" + }, + "startFrom": { + "type": "number", + "format": "float64" + }, + "unitAmount": { + "type": "number", + "format": "float64" + }, + "upTo": { + "type": "number", + "format": "float64" + }, + "upToInfinity": { + "type": "boolean" + } + } + } + } + } + }, + "v1Time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "v1TkeEndpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + } + }, + "v1TlsConfiguration": { + "description": "TLS configuration", + "type": "object", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + } + }, + "v1TotalClusterRate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "v1TotalResourceUsage": { + "description": "Total Resource Usage", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + } + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1TransferJob": { + "description": "transfer job details", + "type": "object", + "properties": { + "finishTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "folder": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "type": "array", + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + }, + "status": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1Uid": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "v1UidRoleSummary": { + "type": "object", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + }, + "v1UidSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1Uids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + } + }, + "v1UpdateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "v1UpdateTenantStatus": { + "description": "Update tenant status", + "type": "object", + "properties": { + "errorMessage": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "stage": { + "type": "string" + } + } + }, + "v1Updated": { + "description": "The resource was updated successfully" + }, + "v1UpdatedMsg": { + "description": "Update response with message", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1Upgrades": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1User": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1UserActivateInfo": { + "type": "object", + "properties": { + "passwordToken": { + "type": "string" + } + } + }, + "v1UserActivateLink": { + "type": "object", + "properties": { + "activationLink": { + "type": "string" + } + } + }, + "v1UserActivityInfo": { + "description": "Active user data", + "type": "object", + "properties": { + "lastLogin": { + "type": "string" + }, + "lastLoginTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1UserAssetSsh": { + "description": "SSH key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + }, + "v1UserAssetSshEntity": { + "description": "SSH Key request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + }, + "v1UserAssetSshSpec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + }, + "v1UserAssetsLocation": { + "description": "Location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Location specification", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean" + }, + "storage": { + "description": "Location type", + "type": "string", + "default": "s3", + "enum": [ + "s3", + "gcp", + "minio" + ] + }, + "type": { + "type": "string" + } + } + } + } + }, + "v1UserAssetsLocationAzure": { + "description": "Azure location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Azure location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "Azure storage config object", + "type": "object", + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "Azure location type [azure]", + "type": "string" + } + } + } + } + }, + "v1UserAssetsLocationAzureSpec": { + "description": "Azure location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "Azure storage config object", + "type": "object", + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "clientCloud": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "public", + "enum": [ + "azure-china", + "azure-government", + "public" + ] + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "Azure location type [azure]", + "type": "string" + } + } + }, + "v1UserAssetsLocationGcp": { + "description": "GCP location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "GCP location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "GCP storage config object", + "type": "object", + "required": [ + "bucketName", + "credentials" + ], + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "GCP location type [gcp]", + "type": "string" + } + } + } + } + }, + "v1UserAssetsLocationGcpSpec": { + "description": "GCP location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "GCP storage config object", + "type": "object", + "required": [ + "bucketName", + "credentials" + ], + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "type": "object", + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + } + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "GCP location type [gcp]", + "type": "string" + } + } + }, + "v1UserAssetsLocationS3": { + "description": "S3 location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + } + } + }, + "v1UserAssetsLocationS3Spec": { + "description": "S3 location specification", + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "S3 storage config object", + "type": "object", + "required": [ + "bucketName", + "region", + "credentials" + ], + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "type": "boolean", + "default": true + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean", + "default": true + } + } + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + } + }, + "v1UserAssetsLocationSpec": { + "description": "Location specification", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean" + }, + "storage": { + "description": "Location type", + "type": "string", + "default": "s3", + "enum": [ + "s3", + "gcp", + "minio" + ] + }, + "type": { + "type": "string" + } + } + }, + "v1UserAssetsLocations": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of locations", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Location object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Location specification", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean" + }, + "storage": { + "description": "Location type", + "type": "string", + "default": "s3", + "enum": [ + "s3", + "gcp", + "minio" + ] + }, + "type": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1UserAssetsSsh": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of SSH keys", + "type": "array", + "uniqueItems": true, + "items": { + "description": "SSH key information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "SSH key specification", + "type": "object", + "properties": { + "publicKey": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1UserAuthenticatedUrl": { + "description": "Returns the Authenticated redirect Url for the palette oidc", + "type": "object", + "properties": { + "redirectUrl": { + "description": "authenticated redirect Url for the palette oidc", + "type": "string" + } + } + }, + "v1UserEntity": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User Entity input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + }, + "v1UserInfo": { + "description": "User basic information", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + }, + "v1UserInfoResponse": { + "type": "object", + "properties": { + "address": { + "description": "End-User's preferred postal address", + "type": "string" + }, + "birthdate": { + "description": "End-User's birthday, represented as an ISO 8601:2004 [ISO8601‑2004] YYYY-MM-DD format", + "type": "string" + }, + "email": { + "description": "End-User's preferred e-mail address", + "type": "string" + }, + "email_verified": { + "description": "User at the time the verification was performed", + "type": "boolean" + }, + "family_name": { + "description": "Surname(s) or last name(s) of the End-User", + "type": "string" + }, + "gender": { + "description": "End-User's gender", + "type": "string" + }, + "given_name": { + "description": "Given name(s) or first name(s) of the End-User", + "type": "string" + }, + "locale": { + "description": "End-User's locale, represented as a BCP47 [RFC5646] language tag", + "type": "string" + }, + "middle_name": { + "description": "Middle name(s) of the End-User", + "type": "string" + }, + "name": { + "description": "End-User's full name in displayable form including all name parts, possibly including titles and suffixes, ordered according to the End-User's locale and preferences", + "type": "string" + }, + "nickname": { + "description": "Casual name of the End-User that may or may not be the same as the given_name", + "type": "string" + }, + "phone_number": { + "description": "End-User's preferred telephone number", + "type": "string" + }, + "phone_number_verified": { + "description": "User at the time the verification was performed", + "type": "boolean" + }, + "picture": { + "description": "URL of the End-User's profile picture", + "type": "string" + }, + "preferred_username": { + "description": "Shorthand name by which the End-User wishes to be referred to at the RP, such as janedoe or j.doe", + "type": "string" + }, + "profile": { + "description": "URL of the End-User's profile page", + "type": "string" + }, + "sub": { + "description": "Subject - Identifier for the End-User at the Issuer", + "type": "string" + }, + "updated_at": { + "description": "Time the End-User's information was last updated", + "type": "integer" + }, + "website": { + "description": "URL of the End-User's Web page or blog", + "type": "string" + }, + "zoneinfo": { + "description": "String from zoneinfo [zoneinfo] time zone database representing the End-User's time zone", + "type": "string" + } + } + }, + "v1UserKubectlSession": { + "type": "object", + "properties": { + "clusterUid": { + "type": "string" + }, + "creationTime": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "podIp": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "port": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "sessionUid": { + "type": "string" + }, + "shellyCluster": { + "type": "string" + }, + "tenantClusterEndpoint": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "userUid": { + "type": "string" + } + } + }, + "v1UserMe": { + "description": "User information wrt permissions", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "User status with permissions", + "properties": { + "activationLink": { + "description": "Contains activation link for the user", + "type": "string" + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean" + }, + "isContractAccepted": { + "description": "Specifies if user account has accepted the contract", + "type": "boolean", + "x-omitempty": false + }, + "loginMode": { + "description": "User's login Mode", + "type": "string" + }, + "projectPermissions": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "tenant": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "tenantPermissions": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1UserMeStatus": { + "description": "User status with permissions", + "properties": { + "activationLink": { + "description": "Contains activation link for the user", + "type": "string" + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean" + }, + "isContractAccepted": { + "description": "Specifies if user account has accepted the contract", + "type": "boolean", + "x-omitempty": false + }, + "loginMode": { + "description": "User's login Mode", + "type": "string" + }, + "projectPermissions": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "tenant": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "tenantPermissions": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "v1UserMeTenant": { + "type": "object", + "properties": { + "orgName": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + } + }, + "v1UserMeta": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "org": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1UserMetaEntity": { + "description": "User meta entity", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1UserPatch": { + "type": "array", + "items": { + "type": "object", + "required": [ + "op", + "path" + ], + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "type": "string", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ] + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + } + } + }, + "v1UserProfile": { + "description": "User Profile", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User Profile specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + } + }, + "status": { + "description": "User Profile status", + "properties": { + "lastPasswordPolicyMail": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastPasswordUpdate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1UserProfileSpec": { + "description": "User Profile specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + } + }, + "v1UserProfileStatus": { + "description": "User Profile status", + "properties": { + "lastPasswordPolicyMail": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastPasswordUpdate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1UserProfiles": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User Profile", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User Profile specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + } + }, + "status": { + "description": "User Profile status", + "properties": { + "lastPasswordPolicyMail": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastPasswordUpdate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1UserRoleMap": { + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "userId": { + "type": "string" + } + } + }, + "v1UserRoleUIDs": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1UserRolesEntity": { + "type": "object", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1UserRsaToken": { + "description": "Rsa Auth token response", + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "v1UserSpec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1UserSpecEntity": { + "description": "User Entity input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1UserSpecSummary": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "projects": { + "description": "Deprecated.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectsCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1UserStatus": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1UserStatusLoginMode": { + "type": "object", + "properties": { + "loginMode": { + "type": "string", + "enum": [ + "dev", + "devops" + ] + } + } + }, + "v1UserSummary": { + "description": "User summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "projects": { + "description": "Deprecated.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectsCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1UserSummarySortFields": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "v1UserSummarySortSpec": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + }, + "v1UserToken": { + "description": "Returns the Authorization token. To be used for further api calls", + "type": "object", + "properties": { + "Authorization": { + "description": "Describes the authentication token in jwt format.", + "type": "string" + }, + "isMfa": { + "description": "Indicates the authentication flow using MFA", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1UserUpdateEntity": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User Entity input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "description": "Deprecated. Use 'v1/users/{uid}/roles' API to assign roles.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + }, + "v1UserUpdateSpecEntity": { + "description": "User Entity input", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "description": "Deprecated. Use 'v1/users/{uid}/roles' API to assign roles.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1Users": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1UsersFilterSpec": { + "description": "Users filter spec", + "properties": { + "emailId": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "v1UsersMetadata": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User meta entity", + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1UsersSummary": { + "description": "Deprecated, Use v1UsersSummaryList - Returns User summary", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "projects": { + "description": "Deprecated.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectsCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1UsersSummaryList": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "User summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "projects": { + "description": "Deprecated.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "projectsCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "v1UsersSummarySpec": { + "description": "Users filter summary spec", + "properties": { + "filter": { + "description": "Users filter spec", + "properties": { + "emailId": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + }, + "v1V1SystemAdminEmail": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "insecureVerify": { + "type": "boolean" + }, + "password": { + "type": "string" + } + } + }, + "v1V1SystemAdminPasswordResetEntity": { + "description": "SystemAdmin", + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "newPassword": { + "type": "string" + }, + "oldPassword": { + "type": "string" + } + } + }, + "v1VMAddVolumeEntity": { + "type": "object", + "required": [ + "addVolumeOptions" + ], + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "dataVolumeTemplate": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + }, + "persist": { + "description": "If 'true' add the disk to the Virtual Machine \u0026 Virtual Machine Instance, else add the disk to the Virtual Machine Instance only", + "type": "boolean" + } + } + }, + "v1VMCluster": { + "description": "VM Dashboard enabled Spectro cluster", + "type": "object", + "properties": { + "metadata": { + "properties": { + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Spectro cluster spec", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + } + } + }, + "status": { + "description": "Spectro cluster status", + "properties": { + "clusterState": { + "type": "string" + } + } + } + } + }, + "v1VMClusters": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "VM Dashboard enabled Spectro cluster", + "type": "object", + "properties": { + "metadata": { + "properties": { + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Spectro cluster spec", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + } + } + }, + "status": { + "description": "Spectro cluster status", + "properties": { + "clusterState": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1VMRemoveVolumeEntity": { + "type": "object", + "required": [ + "removeVolumeOptions" + ], + "properties": { + "persist": { + "description": "If 'true' remove the disk from the Virtual Machine \u0026 Virtual Machine Instance, else remove the disk from the Virtual Machine Instance only", + "type": "boolean" + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "v1Variable": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1VariableFormat": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "v1VariableNames": { + "required": [ + "variables" + ], + "properties": { + "variables": { + "description": "Array of variable names", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1Variables": { + "type": "object", + "properties": { + "variables": { + "description": "List of unique variable fields with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "v1Virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1VirtualCloudClusterConfigEntity": { + "description": "Virtual cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + } + } + }, + "v1VirtualCloudConfig": { + "description": "VirtualCloudConfig is the Schema for the virtual cloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec for cluster-api.", + "type": "object", + "required": [ + "clusterConfig", + "hostClusterUid", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + }, + "hostClusterUid": { + "type": "string" + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "status": { + "description": "Defines the status of virtual cloud config", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + } + } + } + } + }, + "v1VirtualCloudConfigSpec": { + "description": "VirtualCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec for cluster-api.", + "type": "object", + "required": [ + "clusterConfig", + "hostClusterUid", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + }, + "hostClusterUid": { + "type": "string" + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "v1VirtualClusterConfig": { + "description": "Cluster level configuration for virtual cluster", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + }, + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "kubernetesVersion": { + "type": "string", + "default": "" + } + } + }, + "v1VirtualClusterHelmChart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "v1VirtualClusterHelmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } + } + }, + "v1VirtualClusterResize": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1VirtualInstanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "v1VirtualMachine": { + "description": "Virtual cloud machine definition", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Virtual cloud machine definition spec", + "type": "object", + "properties": { + "hostname": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1VirtualMachinePoolCloudConfigEntity": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1VirtualMachinePoolConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + }, + "v1VirtualMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + } + } + }, + "v1VirtualMachineSnapshot": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + }, + "v1VirtualMachineSnapshotList": { + "description": "VirtualMachineSnapshotList is a list of VirtualMachineSnapshot resources", + "type": "object", + "required": [ + "metadata", + "items" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "items": { + "type": "array", + "items": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "status": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + } + } + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "type": "object", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "type": "string" + }, + "remainingItemCount": { + "description": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + "type": "integer", + "format": "int64" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + } + } + } + } + }, + "v1VirtualMachineSnapshotSpec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "type": "object", + "required": [ + "source" + ], + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "source": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + } + } + }, + "v1VirtualMachineSnapshotStatus": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "error": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "indications": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "x-nullable": true + }, + "v1VirtualMachineSpec": { + "description": "Virtual cloud machine definition spec", + "type": "object", + "properties": { + "hostname": { + "type": "string" + } + } + }, + "v1VirtualMachines": { + "description": "List of virtual machines", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Virtual cloud machine definition", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Virtual cloud machine definition spec", + "type": "object", + "properties": { + "hostname": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1VirtualNetwork": { + "description": "Azure virtual network is the fundamental building block for your private network in Azure.", + "type": "object", + "properties": { + "addressSpaces": { + "description": "Location of the virtual network", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "Location of the virtual network", + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated with Azure VPC", + "type": "array", + "items": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + }, + "type": { + "description": "Type of the virtual network", + "type": "string" + } + } + }, + "v1VmAccessCredential": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1VmAccessCredentialSecretSource": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + }, + "v1VmAddVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "v1VmAffinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "v1VmBIOS": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "v1VmBlockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "v1VmBootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "v1VmCDRomTarget": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "v1VmChassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1VmClientPassthroughDevices": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "v1VmClock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "v1VmClockOffsetUTC": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + }, + "v1VmCloudInitConfigDriveSource": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "v1VmCloudInitNoCloudSource": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "v1VmCondition": { + "description": "Condition defines conditions", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1VmConfigDriveSshPublicKeyAccessCredentialPropagation": { + "type": "object" + }, + "v1VmConfigMapVolumeSource": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "v1VmContainerDiskSource": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "v1VmCoreDataVolumeSource": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "v1VmCoreResourceRequirements": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "v1VmCpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "v1VmCpuFeature": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + }, + "v1VmCustomBlockSize": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "v1VmDHCPOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "v1VmDHCPPrivateOptions": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + }, + "v1VmDataVolumeBlankImage": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "v1VmDataVolumeCheckpoint": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + }, + "v1VmDataVolumeSource": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "v1VmDataVolumeSourceHttp": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "v1VmDataVolumeSourceImageIO": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "v1VmDataVolumeSourcePVC": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "v1VmDataVolumeSourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "v1VmDataVolumeSourceRegistry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "v1VmDataVolumeSourceS3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "v1VmDataVolumeSourceUpload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "v1VmDataVolumeSourceVDDK": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + }, + "v1VmDataVolumeSpec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + }, + "v1VmDataVolumeTemplateSpec": { + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "type": "object", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "type": "array", + "items": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "type": "object", + "required": [ + "previous", + "current" + ], + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + } + } + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "source": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "type": "object", + "properties": { + "blank": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "http": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "type": "array", + "items": { + "type": "string" + } + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "type": "array", + "items": { + "type": "string" + } + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + } + }, + "imageio": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "type": "object", + "required": [ + "url", + "diskId" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + } + }, + "pvc": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "type": "object", + "required": [ + "namespace", + "name" + ], + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + } + }, + "registry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "type": "object", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + } + }, + "s3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "type": "object", + "required": [ + "url" + ], + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + } + }, + "upload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "vddk": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "type": "object", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + } + } + } + }, + "sourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + } + }, + "storage": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + } + } + } + } + }, + "v1VmDevices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "v1VmDisk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "v1VmDiskTarget": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "v1VmDomainSpec": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "v1VmDownwardApiVolumeFile": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + }, + "v1VmDownwardApiVolumeSource": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "v1VmDownwardMetricsVolumeSource": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "v1VmDuration": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "v1VmEFI": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + }, + "v1VmEmptyDiskSource": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "v1VmEphemeralVolumeSource": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "v1VmError": { + "description": "Error is the last error encountered during the snapshot/restore", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1VmExecAction": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1VmFeatureApiC": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "v1VmFeatureHyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "v1VmFeatureKVm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "v1VmFeatureSpinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "v1VmFeatureState": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "v1VmFeatureVendorId": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "v1VmFeatures": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "v1VmFieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "v1VmFilesystem": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "v1VmFilesystemVirtiofs": { + "type": "object" + }, + "v1VmFirmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "v1VmGPU": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "v1VmGuestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "v1VmHPETTimer": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "v1VmHostDevice": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "v1VmHostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "v1VmHotplugVolumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "v1VmHttpGetAction": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "v1VmHttpHeader": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + }, + "v1VmHugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + }, + "v1VmHypervTimer": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "v1VmI6300ESBWatchdog": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "v1VmInput": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + }, + "v1VmInstancetypeMatcher": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "v1VmInterface": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "v1VmInterfaceBridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "v1VmInterfaceMacvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "v1VmInterfaceMasquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "v1VmInterfacePasst": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "v1VmInterfaceSRIOV": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "v1VmInterfaceSlirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "v1VmKVmTimer": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "v1VmKernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "v1VmKernelBootContainer": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "v1VmLabelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1VmLabelSelectorRequirement": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1VmLaunchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "v1VmListMeta": { + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "type": "object", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "type": "string" + }, + "remainingItemCount": { + "description": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + "type": "integer", + "format": "int64" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + } + } + }, + "v1VmLocalObjectReference": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "v1VmLunTarget": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "v1VmMachine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "v1VmManagedFieldsEntry": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1VmMemory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "v1VmMemoryDumpVolumeSource": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "v1VmMultusNetwork": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "v1VmNUMA": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "v1VmNUMAGuestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + }, + "v1VmNetwork": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + }, + "v1VmNodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "v1VmNodeSelector": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1VmNodeSelectorRequirement": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1VmNodeSelectorTerm": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1VmObjectFieldSelector": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "v1VmObjectMeta": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "v1VmOwnerReference": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "v1VmPITTimer": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "v1VmPersistentVolumeClaimSpec": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "dataSourceRef": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "v1VmPersistentVolumeClaimVolumeSource": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "v1VmPodAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "v1VmPodAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "v1VmPodDnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1VmPodDnsConfigOption": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1VmPodNetwork": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + }, + "v1VmPort": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + }, + "v1VmPreferenceMatcher": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "type": "object", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + } + }, + "v1VmPreferredSchedulingTerm": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + }, + "v1VmProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "v1VmQemuGuestAgentSshPublicKeyAccessCredentialPropagation": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "v1VmQemuGuestAgentUserPasswordAccessCredentialPropagation": { + "type": "object" + }, + "v1VmQuantity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "v1VmRTCTimer": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + }, + "v1VmRealtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "v1VmRemoveVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + }, + "v1VmResourceFieldSelector": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + }, + "v1VmResourceRequirements": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + }, + "v1VmRng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "v1VmSEV": { + "type": "object" + }, + "v1VmSecretVolumeSource": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "v1VmServiceAccountVolumeSource": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "v1VmSnapshotVolumesLists": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "type": "object", + "properties": { + "excludedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + }, + "v1VmSoundDevice": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "v1VmSshPublicKeyAccessCredential": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "v1VmSshPublicKeyAccessCredentialPropagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "v1VmSshPublicKeyAccessCredentialSource": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + }, + "v1VmStorageSpec": { + "description": "StorageSpec defines the Storage type specification", + "type": "object", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "type": "array", + "items": { + "type": "string" + } + }, + "dataSource": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "resources": { + "description": "ResourceRequirements describes the compute resource requirements.", + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + }, + "requests": { + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object", + "additionalProperties": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + } + }, + "selector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + } + }, + "v1VmSyNICTimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "v1VmSysprepSource": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + }, + "v1VmTPMDevice": { + "type": "object" + }, + "v1VmTcpSocketAction": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "v1VmTimer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "v1VmToleration": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + }, + "v1VmTopologySpreadConstraint": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "v1VmTypedLocalObjectReference": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "type": "object", + "required": [ + "kind", + "name" + ], + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + } + }, + "v1VmUserPasswordAccessCredential": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "v1VmUserPasswordAccessCredentialPropagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "v1VmUserPasswordAccessCredentialSource": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + }, + "v1VmVGPUDisplayOptions": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "v1VmVGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + }, + "v1VmVirtualMachineCondition": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1VmVirtualMachineInstanceSpec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "v1VmVirtualMachineInstanceTemplateSpec": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string", + "format": "date-time", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "type": "array", + "items": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "type": "object", + "properties": { + "Raw": { + "type": "array", + "items": { + "type": "string", + "format": "byte" + } + } + } + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "type": "object", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + } + }, + "spec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "type": "object", + "required": [ + "domain" + ], + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "type": "array", + "items": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "type": "object", + "properties": { + "sshPublicKey": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "configDrive": { + "type": "object" + }, + "qemuGuestAgent": { + "type": "object", + "required": [ + "users" + ], + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "set" + } + } + } + } + }, + "source": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + }, + "userPassword": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "type": "object", + "required": [ + "source", + "propagationMethod" + ], + "properties": { + "propagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "type": "object", + "properties": { + "qemuGuestAgent": { + "type": "object" + } + } + }, + "source": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "type": "object", + "properties": { + "secret": { + "type": "object", + "required": [ + "secretName" + ], + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "type": "object", + "properties": { + "nodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "type": "object", + "required": [ + "weight", + "preference" + ], + "properties": { + "preference": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "type": "object", + "required": [ + "nodeSelectorTerms" + ], + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "type": "array", + "items": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "type": "array", + "items": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "podAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + }, + "podAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "type": "array", + "items": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "type": "array", + "items": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + } + } + } + } + } + }, + "dnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "type": "object", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "type": "array", + "items": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "type": "object", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "type": "object", + "required": [ + "devices" + ], + "properties": { + "chassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "clock": { + "description": "Represents the clock and timers of a vmi.", + "type": "object", + "properties": { + "timer": { + "description": "Represents all available timers in a vmi.", + "type": "object", + "properties": { + "hpet": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + } + }, + "hyperv": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "kvm": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + } + }, + "pit": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + } + }, + "rtc": { + "type": "object", + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + } + } + } + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "description": "UTC sets the guest clock to UTC on each boot.", + "type": "object", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "cpu": { + "description": "CPU allows specifying the CPU topology.", + "type": "object", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "type": "array", + "items": { + "description": "CPUFeature allows specifying a CPU feature.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + } + } + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "type": "object", + "properties": { + "guestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + } + } + }, + "realtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "type": "object", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + } + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "type": "integer", + "format": "int64" + } + } + }, + "devices": { + "type": "object", + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + } + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "virtiofs" + ], + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "type": "object" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "type": "object", + "properties": { + "display": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "deviceName" + ], + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + }, + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "name" + ], + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + } + } + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "type": "array", + "items": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "type": "integer", + "format": "int32" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "type": "integer", + "format": "int32" + }, + "bridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "dhcpOptions": { + "description": "Extra DHCP options to use in the interface.", + "type": "object", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "type": "array", + "items": { + "type": "string" + } + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "type": "array", + "items": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "type": "object", + "required": [ + "option", + "value" + ], + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "type": "integer", + "format": "int32" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + } + } + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + } + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "masquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "type": "array", + "items": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "type": "object", + "required": [ + "port" + ], + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + } + } + }, + "slirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "sriov": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + } + } + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "sound": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + } + }, + "tpm": { + "type": "object" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + } + } + }, + "features": { + "type": "object", + "properties": { + "acpi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "apic": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + } + }, + "hyperv": { + "description": "Hyperv specific features.", + "type": "object", + "properties": { + "evmcs": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "frequencies": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "ipi": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reenlightenment": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "relaxed": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "reset": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "runtime": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "spinlocks": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "type": "integer", + "format": "int64" + } + } + }, + "synic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "synictimer": { + "type": "object", + "properties": { + "direct": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "enabled": { + "type": "boolean" + } + } + }, + "tlbflush": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vapic": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "vendorid": { + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + } + }, + "vpindex": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "kvm": { + "type": "object", + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + } + }, + "pvspinlock": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + }, + "smm": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "firmware": { + "type": "object", + "properties": { + "bootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "type": "object", + "properties": { + "bios": { + "description": "If set (default), BIOS will be used.", + "type": "object", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + } + }, + "efi": { + "description": "If set, EFI will be used instead of BIOS.", + "type": "object", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + } + } + } + }, + "kernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "type": "object", + "properties": { + "container": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + } + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + } + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + } + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "type": "object", + "properties": { + "sev": { + "type": "object" + } + } + }, + "machine": { + "type": "object", + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + } + }, + "memory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "type": "object", + "properties": { + "guest": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "hugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "type": "object", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + } + } + } + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "type": "array", + "items": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "multus": { + "description": "Represents the multus cni network.", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + } + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "description": "Represents the stock pod network interface.", + "type": "object", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + } + } + } + } + }, + "nodeSelector": { + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "type": "object", + "properties": { + "exec": { + "description": "ExecAction describes a \"run in container\" action.", + "type": "object", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "guestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "httpGet": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "type": "array", + "items": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + } + } + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + } + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "type": "integer", + "format": "int32" + }, + "tcpSocket": { + "description": "TCPSocketAction describes an action based on opening a socket", + "type": "object", + "required": [ + "port" + ], + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + } + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "type": "integer", + "format": "int32" + } + } + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "type": "integer", + "format": "int64" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "type": "array", + "items": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "type": "object", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "type": "integer", + "format": "int64" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + } + } + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "type": "array", + "items": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "type": "object", + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "type": "integer", + "format": "int32" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + } + }, + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "type": "array", + "items": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "v1VmVirtualMachineMemoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "type": "object", + "required": [ + "claimName", + "phase" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1VmVirtualMachineStartFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "type": "object", + "properties": { + "consecutiveFailCount": { + "type": "integer", + "format": "int32" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1VmVirtualMachineStateChangeRequest": { + "type": "object", + "required": [ + "action" + ], + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "description": "Provides additional data in order to perform the Action", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + } + }, + "v1VmVirtualMachineVolumeRequest": { + "type": "object", + "properties": { + "addVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "type": "object", + "required": [ + "name", + "disk", + "volumeSource" + ], + "properties": { + "disk": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "blockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "type": "object", + "properties": { + "custom": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "type": "object", + "required": [ + "logical", + "physical" + ], + "properties": { + "logical": { + "type": "integer", + "format": "int32" + }, + "physical": { + "type": "integer", + "format": "int32" + } + } + }, + "matchVolume": { + "description": "Represents if a feature is enabled or disabled.", + "type": "object", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + } + } + } + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "type": "integer", + "format": "int32" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + } + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "type": "object", + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + } + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "type": "object", + "properties": { + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + } + } + }, + "removeVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "type": "object", + "required": [ + "name" + ], + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "type": "array", + "items": { + "type": "string" + }, + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + } + } + } + }, + "v1VmVolume": { + "description": "Volume represents a named volume in a vmi.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "cloudInitConfigDrive": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "cloudInitNoCloud": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "type": "object", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secretRef": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + } + }, + "configMap": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "containerDisk": { + "description": "Represents a docker image with an embedded disk.", + "type": "object", + "required": [ + "image" + ], + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + } + }, + "dataVolume": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + } + }, + "downwardAPI": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "type": "object", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "type": "array", + "items": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "type": "object", + "required": [ + "path" + ], + "properties": { + "fieldRef": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "type": "object", + "required": [ + "fieldPath" + ], + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + } + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "type": "integer", + "format": "int32" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "type": "object", + "required": [ + "resource" + ], + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + } + } + } + } + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "downwardMetrics": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "emptyDisk": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "type": "object", + "required": [ + "capacity" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + } + } + }, + "ephemeral": { + "type": "object", + "properties": { + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + } + } + }, + "hostDisk": { + "description": "Represents a disk created on the cluster level", + "type": "object", + "required": [ + "path", + "type" + ], + "properties": { + "capacity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + } + }, + "memoryDump": { + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "object", + "required": [ + "claimName" + ], + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + } + }, + "secret": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "type": "object", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + } + }, + "serviceAccount": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "type": "object", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + } + }, + "sysprep": { + "description": "Represents a Sysprep volume source.", + "type": "object", + "properties": { + "configMap": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + }, + "secret": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "type": "object", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + } + } + } + } + } + }, + "v1VmVolumeSnapshotStatus": { + "type": "object", + "required": [ + "name", + "enabled" + ], + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + } + }, + "v1VmWatchdog": { + "description": "Named watchdog device.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "i6300esb": { + "description": "i6300esb watchdog device.", + "type": "object", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + } + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + } + }, + "v1VmWeightedPodAffinityTerm": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "type": "object", + "required": [ + "weight", + "podAffinityTerm" + ], + "properties": { + "podAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "type": "object", + "required": [ + "topologyKey" + ], + "properties": { + "labelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaceSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "type": "object", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "type": "array", + "items": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "type": "object", + "required": [ + "key", + "operator" + ], + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "matchLabels": { + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "type": "array", + "items": { + "type": "string" + } + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + } + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "type": "integer", + "format": "int32" + } + } + }, + "v1VsphereAccount": { + "description": "VSphere account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + }, + "v1VsphereAccounts": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "VSphere account information", + "type": "object", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "status": { + "description": "Status of the account", + "type": "object", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1VsphereCloudAccount": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "v1VsphereCloudClusterConfigEntity": { + "description": "vSphere cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + } + } + }, + "v1VsphereCloudConfig": { + "description": "VsphereCloudConfig is the Schema for the vspherecloudconfigs API", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VsphereCloudConfigSpec defines the desired state of VsphereCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "edgeHostRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane", + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "status": { + "description": "VsphereCloudConfigStatus defines the observed state of VsphereCloudConfig", + "type": "object", + "properties": { + "ansibleDigest": { + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "lastOVACreated": { + "type": "string" + }, + "lastVMExported": { + "type": "string" + }, + "nodeImage": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "uploadOvaS3": { + "description": "UploadOVAS3 will hold last image name which uploaded to S3", + "type": "string" + }, + "useCapiImage": { + "description": "If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + } + } + }, + "v1VsphereCloudConfigSpec": { + "description": "VsphereCloudConfigSpec defines the desired state of VsphereCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "edgeHostRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane", + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + }, + "v1VsphereCloudConfigStatus": { + "description": "VsphereCloudConfigStatus defines the observed state of VsphereCloudConfig", + "type": "object", + "properties": { + "ansibleDigest": { + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "lastOVACreated": { + "type": "string" + }, + "lastVMExported": { + "type": "string" + }, + "nodeImage": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "uploadOvaS3": { + "description": "UploadOVAS3 will hold last image name which uploaded to S3", + "type": "string" + }, + "useCapiImage": { + "description": "If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } + }, + "v1VsphereCloudDatacenter": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + } + } + }, + "v1VsphereClusterConfig": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "v1VsphereClusterConfigEntity": { + "type": "object", + "required": [ + "placement" + ], + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "v1VsphereComputeCluster": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1VsphereComputeClusterResources": { + "description": "Datacenter and its resources like datastore, resoucepool, folders", + "type": "object", + "properties": { + "computecluster": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "datacenter": { + "description": "Name of the datacenter", + "type": "string" + } + } + }, + "v1VsphereDatacenter": { + "description": "List of Datacenter with computeclusters", + "type": "object", + "properties": { + "computeclusters": { + "description": "List of the VSphere compute clusters in datacenter", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "datacenter": { + "description": "name of the datacenter of the VSphere", + "type": "string" + }, + "folders": { + "description": "List of the VSphere folders in datacenter", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1VsphereDatacenters": { + "description": "List of Datacenters with computeclusters", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of associated datacenters", + "type": "array", + "uniqueItems": true, + "items": { + "description": "List of Datacenter with computeclusters", + "type": "object", + "properties": { + "computeclusters": { + "description": "List of the VSphere compute clusters in datacenter", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "datacenter": { + "description": "name of the datacenter of the VSphere", + "type": "string" + }, + "folders": { + "description": "List of the VSphere folders in datacenter", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + "v1VsphereDnsMapping": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + }, + "v1VsphereDnsMappingSpec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + }, + "v1VsphereDnsMappings": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of vSphere DNS mapping", + "type": "array", + "uniqueItems": true, + "items": { + "description": "VSphere DNS Mapping", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "VSphere DNS Mapping Spec", + "type": "object", + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "type": "string", + "readOnly": true + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + } + } + } + } + } + } + }, + "v1VsphereEnv": { + "description": "Vsphere environment entity", + "type": "object", + "properties": { + "version": { + "description": "Version of vsphere environment", + "type": "string" + } + } + }, + "v1VsphereImage": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1VsphereInstanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "v1VsphereMachine": { + "description": "vSphere cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "vSphere cloud VM definition spec", + "type": "object", + "required": [ + "vcenterServer", + "nics", + "placement" + ], + "properties": { + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "vSphere network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + }, + "v1VsphereMachinePoolCloudConfigEntity": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "v1VsphereMachinePoolConfig": { + "type": "object", + "required": [ + "isControlPlane", + "instanceType" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1VsphereMachinePoolConfigEntity": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "properties": { + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + }, + "v1VsphereMachineSpec": { + "description": "vSphere cloud VM definition spec", + "type": "object", + "required": [ + "vcenterServer", + "nics", + "placement" + ], + "properties": { + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "vSphere network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "v1VsphereMachines": { + "description": "vSphere machine list", + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "vSphere cloud VM definition", + "type": "object", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "vSphere cloud VM definition spec", + "type": "object", + "required": [ + "vcenterServer", + "nics", + "placement" + ], + "properties": { + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } + }, + "instanceType": { + "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int64" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { + "type": "array", + "items": { + "description": "vSphere network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + }, + "v1VsphereNetworkConfig": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "v1VsphereNetworkConfigEntity": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "v1VsphereNic": { + "description": "vSphere network interface", + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "index": { + "type": "integer", + "format": "int8" + }, + "macAddress": { + "type": "string" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "v1VsphereOverlordClusterConfigEntity": { + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "type": "array", + "items": { + "type": "string" + } + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "v1VspherePlacementConfig": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "v1VspherePlacementConfigEntity": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "v1Workspace": { + "description": "Workspace information", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace specifications", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "policies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + }, + "status": { + "description": "Workspace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace error", + "properties": { + "clusterUid": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1WorkspaceBackup": { + "description": "Workspace backup", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace backup spec", + "properties": { + "config": { + "description": "Workspace backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "workspaceUid": { + "type": "string" + } + } + }, + "status": { + "description": "Workspace backup status", + "properties": { + "workspaceBackupStatuses": { + "type": "array", + "items": { + "description": "Workspace backup status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceBackupConfig": { + "description": "Workspace cluster backup config", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "clusterBackupRefs": { + "type": "array", + "items": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "config": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "requestTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + } + }, + "v1WorkspaceBackupClusterRef": { + "description": "Workspace backup cluster ref", + "properties": { + "backupName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceBackupConfig": { + "description": "Workspace backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "v1WorkspaceBackupConfigEntity": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "v1WorkspaceBackupDeleteEntity": { + "description": "Cluster backup delete config", + "properties": { + "clusterConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace backup cluster ref", + "properties": { + "backupName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "requestUid": { + "type": "string" + } + } + }, + "v1WorkspaceBackupSpec": { + "description": "Workspace backup spec", + "properties": { + "config": { + "description": "Workspace backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "workspaceUid": { + "type": "string" + } + } + }, + "v1WorkspaceBackupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1WorkspaceBackupStatus": { + "description": "Workspace backup status", + "properties": { + "workspaceBackupStatuses": { + "type": "array", + "items": { + "description": "Workspace backup status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceBackupConfig": { + "description": "Workspace cluster backup config", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "clusterBackupRefs": { + "type": "array", + "items": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "config": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "requestTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "v1WorkspaceBackupStatusConfig": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1WorkspaceBackupStatusMeta": { + "description": "Workspace backup status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceBackupConfig": { + "description": "Workspace cluster backup config", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "clusterBackupRefs": { + "type": "array", + "items": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "config": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "requestTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1WorkspaceClusterBackupConfig": { + "description": "Workspace cluster backup config", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "clusterBackupRefs": { + "type": "array", + "items": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "config": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "requestTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1WorkspaceClusterBackupResponse": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "backupedNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "expiryDate": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceClusterNamespace": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + }, + "v1WorkspaceClusterNamespacesEntity": { + "description": "Workspace cluster namespaces update entity", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + }, + "v1WorkspaceClusterRef": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceClusterRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "clusterRestoreRefs": { + "type": "array", + "items": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "restoreUid": { + "type": "string" + } + } + } + }, + "restoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "v1WorkspaceClusterRestoreResponse": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "restoreUid": { + "type": "string" + } + } + }, + "v1WorkspaceClusterRestoreState": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "v1WorkspaceClusterWorkloadCronJobs": { + "description": "Workspace cluster workload cronjobs summary", + "type": "object", + "properties": { + "cronjobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1WorkspaceClusterWorkloadDaemonSets": { + "description": "Workspace cluster workload daemonsets summary", + "type": "object", + "properties": { + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1WorkspaceClusterWorkloadDeployments": { + "description": "Workspace cluster workload deployments summary", + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1WorkspaceClusterWorkloadJobs": { + "description": "Workspace cluster workload jobs summary", + "type": "object", + "properties": { + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1WorkspaceClusterWorkloadNamespaces": { + "description": "Workspace cluster workload namespaces summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "namespaces": { + "type": "array", + "items": { + "description": "Cluster workload namespace summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1WorkspaceClusterWorkloadPods": { + "description": "Workspace cluster workload pods summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } + } + } + } + } + }, + "v1WorkspaceClusterWorkloadRoleBindings": { + "description": "Workspace cluster workload rbac bindings summary", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "v1WorkspaceClusterWorkloadStatefulSets": { + "description": "Workspace cluster workload statefulsets summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "statefulSets": { + "type": "array", + "items": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + }, + "v1WorkspaceClustersWorkloadCronJobs": { + "description": "Workspace clusters workload cronjobs summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload cronjobs summary", + "type": "object", + "properties": { + "cronjobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadDaemonSets": { + "description": "Workspace clusters workload statefulsets summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload daemonsets summary", + "type": "object", + "properties": { + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadDeployments": { + "description": "Workspace clusters workload deployments summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload deployments summary", + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadJobs": { + "description": "Workspace clusters workload jobs summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload jobs summary", + "type": "object", + "properties": { + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadNamespaces": { + "description": "Workspace clusters workload namespaces summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload namespaces summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "namespaces": { + "type": "array", + "items": { + "description": "Cluster workload namespace summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadPods": { + "description": "Workspace clusters workload pods summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload pods summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadRoleBindings": { + "description": "Workspace clusters workload rbac bindings summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload rbac bindings summary", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceClustersWorkloadStatefulSets": { + "description": "Workspace clusters workload statefulsets summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload statefulsets summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "statefulSets": { + "type": "array", + "items": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + } + } + }, + "v1WorkspaceEntity": { + "description": "Workspace information", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace specifications", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "policies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + "v1WorkspaceError": { + "description": "Workspace error", + "properties": { + "clusterUid": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + }, + "v1WorkspaceNamespaceImage": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1WorkspaceNamespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + }, + "v1WorkspacePolicies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + } + }, + "v1WorkspaceQuota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + }, + "v1WorkspaceResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + }, + "v1WorkspaceResourceAllocationsEntity": { + "description": "Workspace resource allocation update entity", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + }, + "v1WorkspaceRestore": { + "description": "Workspace restore", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Workspace restore spec", + "properties": { + "workspaceUid": { + "type": "string" + } + } + }, + "status": { + "description": "Workspace restore status", + "properties": { + "workspaceRestoreStatuses": { + "type": "array", + "items": { + "description": "Workspace restore status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "clusterRestoreRefs": { + "type": "array", + "items": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "restoreUid": { + "type": "string" + } + } + } + }, + "restoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + } + } + }, + "v1WorkspaceRestoreConfig": { + "description": "Workspace cluster restore config", + "required": [ + "backupName", + "sourceClusterUid" + ], + "properties": { + "backupName": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + }, + "sourceClusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceRestoreConfigEntity": { + "description": "Cluster restore config", + "required": [ + "backupRequestUid" + ], + "properties": { + "backupRequestUid": { + "type": "string" + }, + "restoreConfigs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster restore config", + "required": [ + "backupName", + "sourceClusterUid" + ], + "properties": { + "backupName": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + }, + "sourceClusterUid": { + "type": "string" + } + } + } + } + } + }, + "v1WorkspaceRestoreSpec": { + "description": "Workspace restore spec", + "properties": { + "workspaceUid": { + "type": "string" + } + } + }, + "v1WorkspaceRestoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1WorkspaceRestoreStatus": { + "description": "Workspace restore status", + "properties": { + "workspaceRestoreStatuses": { + "type": "array", + "items": { + "description": "Workspace restore status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "clusterRestoreRefs": { + "type": "array", + "items": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "restoreUid": { + "type": "string" + } + } + } + }, + "restoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + } + } + }, + "v1WorkspaceRestoreStatusMeta": { + "description": "Workspace restore status meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "requestUid": { + "type": "string" + }, + "workspaceRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "clusterRestoreRefs": { + "type": "array", + "items": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "restoreUid": { + "type": "string" + } + } + } + }, + "restoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + }, + "v1WorkspaceRolesPatch": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + }, + "v1WorkspaceRolesUidSummary": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1WorkspaceScopeRoles": { + "description": "List all workspaces with the roles assigned to the users", + "properties": { + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "List projects and its workspaces", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace users and their roles", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "v1WorkspaceSpec": { + "description": "Workspace specifications", + "properties": { + "clusterNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + }, + "defaultResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + } + }, + "clusterRbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + }, + "status": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "policies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "clusterUids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "includeAllClusters": { + "type": "boolean" + } + } + } + } + }, + "quota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": -1, + "x-omitempty": false + }, + "memoryMiB": { + "type": "number", + "minimum": -1, + "x-omitempty": false + } + } + } + } + } + } + }, + "v1WorkspaceStatus": { + "description": "Workspace status", + "properties": { + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace error", + "properties": { + "clusterUid": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + } + } + } + }, + "v1WorkspaceWorkloadsFilter": { + "description": "Workspace workloads filter", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "v1WorkspaceWorkloadsSpec": { + "description": "Workspace workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Workspace workloads filter", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + }, + "v1WorkspacesRoles": { + "description": "Workspace users and their roles", + "properties": { + "inheritedRoles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "uid": { + "type": "string" + } + } + }, + "v1WorkspacesRolesPatch": { + "type": "object", + "properties": { + "workspaces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "uid": { + "type": "string" + } + } + } + } + } + }, + "v1YearlyUsage": { + "description": "Yearly usage object", + "properties": { + "billingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "start": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + }, + "monthlyUsages": { + "description": "List of monthly usages", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Monthly usage object", + "properties": { + "month": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "tenantUsages": { + "description": "List of tenants usage", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Tenant usage object", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "description": "Tenant uid", + "type": "string" + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + } + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "type": "number", + "format": "float64" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "type": "number", + "format": "float64" + } + } + } + }, + "productUsages": { + "description": "Product usage", + "properties": { + "alloyUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + }, + "pureUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "type": "number", + "format": "int64" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "type": "number", + "format": "float64" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "type": "number", + "format": "int64" + }, + "usedCredits": { + "description": "Used credits", + "type": "number", + "format": "float64" + } + } + } + } + } + } + }, + "v1ZoneEntity": { + "description": "Azure availability zone entity", + "type": "object", + "properties": { + "id": { + "description": "Azure availability zone id", + "type": "string" + } + } + }, + "v1k8CertificateAuthority": { + "description": "K8 Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "ApiKey": { + "description": "API key authorization where API key can be generated from Palette console under Profile \u003e My API Keys", + "type": "apiKey", + "name": "ApiKey", + "in": "header" + }, + "Authorization": { + "description": "JWT token authorization obtained using /v1/auth/authenticate api", + "type": "apiKey", + "name": "Authorization", + "in": "header" } } } \ No newline at end of file diff --git a/docs/api-content/api-docs/v1/api.json b/docs/api-content/api-docs/v1/api.json index 0a0647fa93..bfb1fbc64b 100644 --- a/docs/api-content/api-docs/v1/api.json +++ b/docs/api-content/api-docs/v1/api.json @@ -9595,21 +9595,6 @@ }, "type": "object" }, - "v1DeleteMeta": { - "description": "Properties to send back after deletion operation", - "properties": { - "count": { - "format": "int64", - "type": "integer" - }, - "items": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - } - } - }, "v1DeletedMsg": { "description": "Deleted response with message", "properties": { @@ -10490,6 +10475,11 @@ }, "type": { "description": "Type indicates DDNS or VIP", + "enum": [ + "VIP", + "External", + "DDNS" + ], "type": "string" } }, @@ -14100,6 +14090,22 @@ }, "type": "object" }, + "v1K8MachineCertificate": { + "description": "K8 Certificates for control plane nodes", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "items": { + "$ref": "#/definitions/v1k8CertificateAuthority" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, "v1KubeBenchEntity": { "description": "KubeBench response", "properties": { @@ -25586,6 +25592,18 @@ } } }, + "v1SpectroClusterK8sCertificate": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "properties": { + "machineCertificates": { + "items": { + "$ref": "#/definitions/v1K8MachineCertificate" + }, + "type": "array" + } + }, + "type": "object" + }, "v1SpectroClusterKubeCtlRedirect": { "description": "Active resources of tenant", "properties": { @@ -38318,6 +38336,25 @@ } }, "type": "object" + }, + "v1k8CertificateAuthority": { + "description": "K8 Certificate Authority", + "properties": { + "certificates": { + "items": { + "$ref": "#/definitions/v1Certificate" + }, + "type": "array" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "Certificate expiry time" + }, + "name": { + "type": "string" + } + }, + "type": "object" } }, "info": { @@ -63909,43 +63946,6 @@ } }, "/v1/packs": { - "delete": { - "operationId": "v1PacksSummaryDelete", - "parameters": [ - { - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "in": "query", - "name": "filters", - "type": "string" - }, - { - "description": "Scope the request to the specified project uid", - "in": "header", - "name": "ProjectUid", - "type": "string" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "$ref": "#/definitions/v1DeleteMeta" - } - } - }, - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "summary": "Deletes the packs", - "tags": [ - "packs" - ] - }, "get": { "operationId": "v1PacksSummaryList", "parameters": [ @@ -72798,7 +72798,42 @@ "required": true, "type": "string" } - ] + ], + "put": { + "operationId": "v1SpectroClustersK8CertificateUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterK8sCertificate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update K8Certificate for spectro cluster", + "tags": [ + "spectroclusters" + ] + } }, "/v1/spectroclusters/{uid}/k8certificates/renew": { "parameters": [ diff --git a/docs/docs-content/automation/palette-cli/commands/ec.md b/docs/docs-content/automation/palette-cli/commands/ec.md index 1e188fbfb9..cf39ced4e3 100644 --- a/docs/docs-content/automation/palette-cli/commands/ec.md +++ b/docs/docs-content/automation/palette-cli/commands/ec.md @@ -176,7 +176,8 @@ for the following prerequisites: The `--validate` is only available in environments that have internet access to download the Helm charts required by the Validator. If you are in an environment without internet access, the validation will not be able to execute and will -return an error. +return an error. The `--validate` flag will honor proxy settings if they are set in the environment through the +following environment variables: `HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`. ::: diff --git a/docs/docs-content/automation/palette-cli/install-palette-cli.md b/docs/docs-content/automation/palette-cli/install-palette-cli.md index b421ccefe8..5d28ea0e3c 100644 --- a/docs/docs-content/automation/palette-cli/install-palette-cli.md +++ b/docs/docs-content/automation/palette-cli/install-palette-cli.md @@ -62,7 +62,7 @@ palette version ``` ```shell hideClipboard -Palette CLI version: 4.4.6 +Palette CLI version: 4.4.8 ``` ## Next Steps diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/_category_ .json b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/_category_.json similarity index 100% rename from docs/docs-content/byoos/capi-image-builder/build-image-vmware/_category_ .json rename to docs/docs-content/byoos/capi-image-builder/build-image-vmware/_category_.json diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/_category_.json b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/_category_.json new file mode 100644 index 0000000000..ae9ddb024d --- /dev/null +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/_category_.json @@ -0,0 +1,3 @@ +{ + "position": 50 +} diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/airgap-build.md b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/airgap-build.md new file mode 100644 index 0000000000..c2e313c5a9 --- /dev/null +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/airgap-build.md @@ -0,0 +1,22 @@ +--- +sidebar_label: "Airgap Build" +title: "Airgap CAPI Image Build" +description: + "Learn how to use the CAPI Image Builder to create images for Palette and VerteX in airgapped environments." +icon: "" +hide_table_of_contents: false +sidebar_position: 20 +tags: ["operating system", "byoos", "capi iamge builder", "airgap"] +--- + + +The CAPI Image Builder can be used in airgapped environments to build images for Kubernetes clusters deployed through Palette and VerteX that use VMware vSphere as the infrastructure provider. Review the guides below for examples on how to build custom [Rocky Linux](https://rockylinux.org/) and [Red Hat Enterprise Linux (RHEL)](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux) images with . + +:::preview + +::: + +## Resources + +- [Airgap RHEL and PXK](./rhel-capi-airgap.md) +- [Airgap Rocky and PXK](./rocky-capi-airgap.md) diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/rhel-capi-airgap.md b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/rhel-capi-airgap.md new file mode 100644 index 0000000000..dbb8a0b5aa --- /dev/null +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/rhel-capi-airgap.md @@ -0,0 +1,556 @@ +--- +sidebar_label: "RHEL and PXK" +title: "RHEL and Palette eXtended Kubernetes" +description: + "Learn how to build a custom RHEL with PXK image for VMware vSphere in an airgapped environment and use it to deploy a + Kubernetes cluster." +icon: "" +hide_table_of_contents: false +sidebar_position: 10 +tags: ["operating system", "byoos", "profiles", "pxk", "vmware", "airgap"] +--- + + +This guide teaches you how to use the [CAPI Image Builder](../../capi-image-builder.md) tool in an airgapped environment to create a custom Red Hat +Enterprise Linux (RHEL) image with for clusters that target VMware vSphere. + +:::preview + +::: + +## Prerequisites + +- Access to the VMware vSphere environment, including credentials and permission to create virtual machines. + +- A valid [RHEL subscription](https://www.redhat.com/en/store/linux-platforms) and access to the + [Red Hat Developer Portal](https://developers.redhat.com/products/rhel/download?source=sso). You will need to provide + the username and password for the subscription during the build process. + +- An airgapped instance of + [Palette](../../../../enterprise-version/install-palette/install-on-vmware/airgap-install/install.md) or + [VerteX](../../../../vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md) deployed in VMware + vSphere. + +- SSH access to the VMware vSphere + [airgap support VM](../../../../enterprise-version/install-palette/install-on-vmware/airgap-install/vmware-vsphere-airgap-instructions.md) + utilized to deploy the airgapped instance of Palette or Vertex. + +- The following artifacts must be available in the root home directory of the airgap support VM. You can download the + files in a system with internet access and then transfer them to your airgap environment. + - CAPI Image Builder compressed archive file. Contact your Palette support representative to obtain the latest version + of the tool. This guide uses version `4.4.4` of the tool as an example. + - [RHEL ISO](https://developers.redhat.com/products/rhel/download?source=sso) version `8.8`. Ensure you download the + **x86_64 DVD ISO** and not the **x86_64 BOOT ISO**, and make sure you have its **SHA256** checksum available. This + guide uses RHEL 8.8 as an example. Refer to the [Configuration Reference](../../config-reference.md) page for + details on supported operating systems. + - Airgap Kubernetes pack binary of the version for which the image will be generated. This guide uses version `1.28.9` + as an example. Refer to the + [Additional Packs](../../../../enterprise-version/install-palette/airgap/supplemental-packs.md) page for + instructions on how to download the binary. Additionally, check the supported Kubernetes versions in the + [Compatibility Matrix](../../comp-matrix-capi-builder.md). + +## Build Custom Image + +1. Open a terminal window and SSH into the airgap support VM using the command below. Replace `/path/to/private_key` + with the path to the private SSH key and `palette.example.com` with the IP address or hostname of the airgap support + VM. + + ```shell + ssh -i /path/to/private_key ubuntu@palette.example.com + ``` + +2. Switch to the `root` user account to complete the remaining steps. + + ```shell + sudo --login + ``` + +3. Ensure all the artifacts listed in the [Prerequisites](#prerequisites) section are available in the root home + directory of the airgap support VM. + + ```shell + ls + ``` + + ```text hideClipboard + airgap-pack-kubernetes-1.28.9.bin bin capi-image-builder-v4.4.4.tgz prep rhel-8.8-x86_64-dvd.iso snap + ``` + + :::warning + + The following steps will use these file names as an example. Adjust the commands if you downloaded the artifacts + with different names. + + ::: + +4. Extract the CAPI Image Builder file. + + ```shell + tar --extract --gzip --file=capi-image-builder-v4.4.4.tgz + ``` + +5. Update the permissions of the `output` folder to allow the CAPI Builder tool to create directories and files within + it. + + ```shell + chmod a+rwx output + ``` + +6. Move the RHEL ISO file to the `output` folder. + + ```shell + mv rhel-8.8-x86_64-dvd.iso output/ + ``` + +7. Copy the `ks.cfg.rhel8` file from the `kickstart` folder to the `output` folder as `ks.cfg`. + + ```shell + cp kickstart/ks.cfg.rhel8 output/ks.cfg + ``` + +8. Copy the `server.crt` file from the `/opt/spectro/ssl/` directory to the `rpmrepo` folder. + + ```bash + cp /opt/spectro/ssl/server.crt rpmrepo/ + ``` + +9. Open the **imageconfig** template file located in the `output` folder and fill in the required parameters. For a + complete list of parameters, refer to the [Configuration Reference](../../config-reference.md) page. Additionally, + refer to the [Compatibility Matrix](../../comp-matrix-capi-builder.md) for a list of supported Kubernetes versions + and their corresponding dependencies. + + The **imageconfig** is the file you use to set up the CAPI Image Builder according to your requirements. This + includes specifying the OS type, Kubernetes version, whether the image should be FIPS compliant, and more. + + Use the example configuration below for building a RHEL 8 CAPI image in an airgapped environment. Replace + `` and `` with your RHEL subscription credentials. Replace + `` with the RHEL ISO checksum. Update the VMware-related placeholders with the values from your VMware + vSphere environment. Additionally, replace `` with the hostname or IP address of your airgap + support VM. + + :::warning + + If you used the airgap support VM hostname during the execution of the `airgap-setup.sh` script, ensure to enter the + VM's hostname in the `airgap_ip` parameter. The same applies if you used the VM’s IP address. + + ::: + + ```text {4-5,9,13,19-22,26-27,30-31,38-46,64-65} + # Define the OS type and version here + # os_version=rhel-8 | rhel-9 | rockylinux-8 | rockylinux-9 + # image_type=standard | fips + os_version=rhel-8 + image_type=standard + + # Define the image name + # image_name= + image_name=rhel-8 + + # Define the Cloud type + # cloud_type=vmware + cloud_type=vmware + + # Define the Component Versions + # + # containerd crictl and cni version update should be done + # only if the images are available in the upstream repositories + k8s_version=1.28.9 + cni_version=1.2.0 + containerd_version=1.7.13 + crictl_version=1.26.0 + + # Define RHEL subscription credentials(if $image_type=rhel) + # used while image creation to use package manager + rhel_subscripocky-8user='' + rhel_subscription_pass='' + + # Define ISO url(if image is rhel or rockylinux) + iso_name=rhel-8.8-x86_64-dvd.iso + iso_checksum= + + # Define AWS infra details + aws_access_key= + aws_secret_key= + + # Define Vmware infra details + vcenter_server= + vcenter_user= + vcenter_password= + vcenter_datacenter= + vcenter_datastore= + vcenter_network= + vcenter_folder= + vcenter_cluster= + vcenter_resource_pool= + + # Optional: for OVA based builds + vcenter_template= + + # Define Azure infra details + azure_client_id= + azure_client_secret= + azure_subscription_id= + azure_location= + azure_storage_account= + azure_resource_group= + + # Define GCE infra details + google_app_creds= + gcp_project_id= + + # Airgap Configuration + airgap=true + airgap_ip= + ``` + + :::tip + + To build a FIPS-compliant image, set `image_type` to `fips`. + + ::: + + Once you are done making the alterations, save and exit the file. + +10. Load the CAPI Image Builder container image with the command below. + + + + + ```shell + docker load < capi-builder-v4.4.4.tar + ``` + + + + + ```shell + podman load < capi-builder-v4.4.4.tar + ``` + + + + +11. Load the Yum container image with the command below. The Yum container is used to serve the packages required by the + CAPI Image Builder. + + + + + ```shell + docker load < yum-repo-v1.0.0.tar + ``` + + + + + ```shell + podman load < yum-repo-v1.0.0.tar + ``` + + + + +12. Confirm that both container images were loaded correctly. + + + + + ```shell + docker images + ``` + ```text hideClipboard + REPOSITORY TAG IMAGE ID CREATED SIZE + gcr.io/spectro-images-public/imagebuilder/capi-builder v4.4.4 34ae97fee5e3 10 days ago 2.59 GB + gcr.io/spectro-images-public/imagebuilder/yum-repo v1.0.0 b03879039936 6 weeks ago 603 MB + ``` + + + + + ```shell + podman images + ``` + ```text hideClipboard + REPOSITORY TAG IMAGE ID CREATED SIZE + gcr.io/spectro-images-public/imagebuilder/capi-builder v4.4.4 34ae97fee5e3 10 days ago 2.59 GB + gcr.io/spectro-images-public/imagebuilder/yum-repo v1.0.0 b03879039936 6 weeks ago 603 MB + ``` + + + + +13. Start the Yum container and assign its ID to the `BUILD_ID_YUM` variable. + + + + + ```shell + BUILD_ID_YUM=$(docker run --volume /root/rpmrepo:/var/www/html/rpmrepo --publish 9000:80 --detach gcr.io/spectro-images-public/imagebuilder/yum-repo:v1.0.0) + ``` + + + + + ```shell + BUILD_ID_YUM=$(podman run --volume /root/rpmrepo:/var/www/html/rpmrepo --publish 9000:80 --detach gcr.io/spectro-images-public/imagebuilder/yum-repo:v1.0.0) + ``` + + + + +14. Execute the command below to visualize the Yum container logs. + + + + + ```shell + docker logs --follow $BUILD_ID_YUM + ``` + + Monitor the output until a `Pool finished` message appears, indicating that the process has completed successfully. + + ```text hideClipboard {7} + # Output condensed for readability + Directory walk started + Directory walk done - 53 packages + Temporary output repo path: /var/www/html/rpmrepo/.repodata/ + Preparing sqlite DBs + Pool started (with 5 workers) + Pool finished + ``` + + + + + ```shell + podman logs --follow $BUILD_ID_YUM + ``` + + Monitor the output until you see a `Pool finished` message, which indicates that the process has completed successfully. + + ```text hideClipboard {7} + # Output condensed for readability + Directory walk started + Directory walk done - 53 packages + Temporary output repo path: /var/www/html/rpmrepo/.repodata/ + Preparing sqlite DBs + Pool started (with 5 workers) + Pool finished + ``` + + + +15. Issue the following command to upload the airgap Kubernetes pack to the airgap registry. + + ```shell + chmod +x airgap-pack-kubernetes-1.28.9.bin && \ + ./airgap-pack-kubernetes-1.28.9.bin + ``` + +16. Start the CAPI Image Builder container and assign the container ID to the `BUILD_ID_CAPI` variable. The tool will + create and configure a VM named `rhel-8` with Dynamic Host Configuration Protocol (DHCP) in your VMware vSphere + environment. It will then generate a RHEL 8 CAPI image from the VM and save it to the `output` folder. + + + + + ```bash + BUILD_ID_CAPI=$(docker run --net=host --volume /root/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v4.4.4) + ``` + + + + + ```bash + BUILD_ID_CAPI=$(podman run --net=host --volume /root/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v4.4.4) + ``` + + + + + If you need the VM to use static IP placement instead of DHCP, follow the steps described below. + + +
+ CAPI Image Builder with Static IP Placement + + 1. Open the `ks.cfg` file located in the output folder. Find and replace the network line + `network --bootproto=dhcp --onboot=on --ipv6=auto --activate --hostname=capv.vm` with the configuration below. + + ```text + network --bootproto=static --ip= --netmask= --gateway= --nameserver= + ``` + + Then, replace `` with a valid IP address from your VMware vSphere environment, and + ``, ``, and `` with the correct values from your VMware vSphere + environment. + + Once you are finished doing the alterations, save and exit the file. + + 2. Issue the command below to start the CAPI Image Builder container and assign the container ID to the `BUILD_ID_CAPI` + variable. The tool will use the **imageconfig** file to create and configure a VM with static IP placement in + your VMware vSphere environment. + + + + + ```bash + BUILD_ID_CAPI=$(docker run --net=host --volume /home/ubuntu/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v1.5.0) + ``` + + + + + ```bash + BUILD_ID_CAPI=$(podman run --net=host --volume /home/ubuntu/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v1.5.0) + ``` + + + + +
+ +17. Execute the following command to view the CAPI Image Builder container logs and monitor the build progress. + + + + + ```shell + docker logs --follow $BUILD_ID_CAPI + ``` + + + + + + ```shell + podman logs --follow $BUILD_ID_CAPI + ``` + + + + + + :::info + + It may take a few minutes for the logs to start being displayed, and the build takes several minutes to complete. + + ::: + +18. Once the build is complete, the RHEL 8 CAPI image will be downloaded to a folder named `rhel-8` within the output + directory on your airgap support VM, and the CAPI Image Builder VM will be deleted from VMware vSphere. Issue the + command below to confirm that the build files are present in the output directory. + + ```shell + ls output/rhel-8 + ``` + + ```text hideClipboard + packer-manifest.json rhel-8-kube-v1.28.9.mf rhel-8-kube-v1.28.9.ova.sha256 rhel-8.ovf rhel-8-disk-0.vmdk rhel-8-kube-v1.28.9.ova rhel-8-kube-v1.28.9.ovf + ``` + +19. Copy the `rhel-8-kube-v1.28.9.ova` file to the home directory of the airgap support VM. + + ```shell + cp /root/output/rhel-8/rhel-8-kube-v1.28.9.ova /home/ubuntu/ + ``` + + Next, open a new terminal window on your local machine and use the `scp` command to copy the + `rhel-8-kube-v1.28.9.ova` file. Replace `/path/to/private_key` with the path to the private SSH key and + `palette.example.com` with the IP address or hostname of the airgap support VM. + + ```shell + scp -i /path/to/private_key ubuntu@palette.example.com:/home/ubuntu/rhel-8-kube-v1.28.9.ova . + ``` + +20. To make the image available in VMware vSphere, log in to your environment and locate the `vcenter_folder` you + defined in step **10** of this guide. + + :::info + + You can also use the following steps to make the image available in a VMware vSphere environment that is not + connected to the one you used for building the image. + + ::: + +21. Right-click the folder and select **Deploy OVF Template** to deploy a VM using the RHEL 8 OVA file that was built in + step **16** of this guide. + +22. In the **Deploy OVF Template** wizard, click **Local File**, then **Upload Files**, and select the + `rhel-8-kube-v1.28.9.ova` file from the folder on your local machine. Click **Next** to continue. + +23. Assign a name to the virtual machine, such as `rhel-8-kube-v1.28.9`, and select the folder you created previously as + the target location. Click **Next** to proceed. + +24. Select a compute resource and click **Next**. + +25. Review the VM configuration, accept the license agreements, and click **Next**. + +26. Select the storage location and network configuration and click **Next**. Then, click **Finish** to deploy the VM. + + :::warning + + It takes a while for the VM to deploy, approximately 45 minutes or more. The download of the OVA file takes up the + majority of the time. You can monitor the progress of this process in VMware vSphere by looking at the **Recent + Tasks** tab and filtering the **Task Name** column by `Deploy OVF Template`. + + ::: + +27. Once the VM is created, right-click it and select **Convert to Template**. This will convert the VM into a RHEL 8 + image template that you can reference during the cluster profile creation. + +## Create Cluster Profile + +The RHEL 8 image is now built and available in the VMware vSphere environment. You can use it to create a cluster +profile and deploy a VMware vSphere host cluster. + +19. Log in to your airgapped instance of Palette or VerteX and select **Profiles** from the left **Main Menu**. + +20. Click **Add Cluster Profile** and follow the wizard to create a new profile. + +21. In the **Basic Information** section, assign the cluster profile a name and a brief description, and select the type + as **Full**. Click **Next**. + +22. In the **Cloud Type** section, select **VMware** and click **Next**. + +23. The **Profile Layers** section is where you specify the packs that compose the profile. This guide uses the + following packs as an example. + + | Pack Name | Version | Layer | + | --------------------------- | ------- | ---------------- | + | BYOOS | 1.0.0 | Operating System | + | Palette eXtended Kubernetes | 1.28.9 | Kubernetes | + | Calico | 3.28.0 | Network | + | vSphere CSI | 3.2.0 | Storage | + + + Reference the custom RHEL 8 image template path in your VMware vSphere environment when populating the pack details + for the layer. For example, in the code snippet below, `/Datacenter/vm/sp-docs/rhel-8-kube-v1.28.9` is the vSphere path to the image. + + ```yaml + pack: + osImageOverride: "/Datacenter/vm/sp-docs/rhel-8-kube-v1.28.9" + osName: "rhel" + osVersion: "8" + ``` + + As you fill out the information for each layer, click **Next** to proceed. + + :::warning + + The Palette eXtended Kubernetes pack version must match the Kubernetes version specified in the **imageconfig** + file. + + ::: + +24. Review the profile layers and click **Finish Configuration** to create the cluster profile. + +25. Deploy a VMware host cluster using the created cluster profile. Refer to the + [Create and Manage VMware Clusters](../../../../clusters/data-center/vmware/create-manage-vmware-clusters.md) guide + for instructions on deploying a VMware host cluster. + +## Validate + +1. Log in to the VMware vSphere environment and navigate to the **Inventory** view. + +2. Select the **VMs and Templates** tab and verify the custom RHEL 8 image is available. diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/rocky-capi-airgap.md b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/rocky-capi-airgap.md new file mode 100644 index 0000000000..ff3d02c051 --- /dev/null +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/airgap-build/rocky-capi-airgap.md @@ -0,0 +1,551 @@ +--- +sidebar_label: "Rocky and PXK" +title: "Rocky and Palette eXtended Kubernetes" +description: + "Learn how to build a custom Rocky with PXK image for VMware vSphere in an airgapped environment and use it to deploy + a Kubernetes cluster." +icon: "" +hide_table_of_contents: false +sidebar_position: 20 +tags: ["operating system", "byoos", "profiles", "pxk", "vmware", "airgap"] +--- + + +This guide teaches you how to use the [CAPI Image Builder](../../capi-image-builder.md) tool in an airgapped environment to create a custom +[Rocky Linux](https://rockylinux.org/) image with for clusters that target VMware vSphere. + +:::preview + +::: + +## Prerequisites + +- Access to a VMware vSphere environment, including credentials and permission to create virtual machines. + +- An airgapped instance of + [Palette](../../../../enterprise-version/install-palette/install-on-vmware/airgap-install/install.md) or + [VerteX](../../../../vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md) deployed in VMware + vSphere. + +- SSH access to the VMware vSphere + [airgap support VM](../../../../enterprise-version/install-palette/install-on-vmware/airgap-install/vmware-vsphere-airgap-instructions.md) + utilized to deploy the airgapped instance of Palette or Vertex. + +- The following artifacts must be available in the root home directory of the airgap support VM. You can download the + files in a system with internet access and then transfer them to your airgap environment. + - CAPI Image Builder compressed archive file. Contact your Palette support representative to obtain the latest version + of the tool. This guide uses version `4.4.4` of the tool as an example. + - [Rocky Linux ISO](https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8-latest-x86_64-dvd.iso) version + `8-latest`. Ensure you download the **x86_64 DVD ISO** and not the **x86_64 BOOT ISO**, and make sure you have its + **SHA256** checksum available. This guide uses Rocky 8 as an example. Refer to the + [Configuration Reference](../../config-reference.md) page for details on supported operating systems. + - Airgap Kubernetes pack binary of the version for which the image will be generated. This guide uses version `1.28.9` + as an example. Refer to the + [Additional Packs](../../../../enterprise-version/install-palette/airgap/supplemental-packs.md) page for + instructions on how to download the binary. Additionally, check the supported Kubernetes versions in the + [Compatibility Matrix](../../comp-matrix-capi-builder.md). + +## Build Custom Image + +1. Open a terminal window and SSH into the airgap support VM using the command below. Replace `/path/to/private_key` + with the path to the private SSH key and `palette.example.com` with the IP address or hostname of the airgap support + VM. + + ```shell + ssh -i /path/to/private_key ubuntu@palette.example.com + ``` + +2. Switch to the `root` user account to complete the remaining steps. + + ```shell + sudo --login + ``` + +3. Ensure all the artifacts listed in the [Prerequisites](#prerequisites) section are available in the root home + directory of the airgap support VM. + + ```shell + ls + ``` + + ```text hideClipboard + airgap-pack-kubernetes-1.28.9.bin bin capi-image-builder-v4.4.4.tgz prep Rocky-8-latest-x86_64-dvd.iso snap + ``` + + :::warning + + The following steps will use these file names as an example. Adjust the commands if you downloaded the artifacts + with different names. + + ::: + +4. Extract the CAPI Image Builder file. + + ```shell + tar --extract --gzip --file=capi-image-builder-v4.4.4.tgz + ``` + +5. Update the permissions of the `output` folder to allow the CAPI Builder tool to create directories and files within + it. + + ```shell + chmod a+rwx output + ``` + +6. Move the Rocky Linux ISO file to the `output` folder. + + ```shell + mv Rocky-8-latest-x86_64-dvd.iso output/ + ``` + +7. Copy the `ks.cfg.rocky8` file from the `kickstart` folder to the `output` folder as `ks.cfg`. + + ```shell + cp kickstart/ks.cfg.rocky8 output/ks.cfg + ``` + +8. Copy the `server.crt` file from the `/opt/spectro/ssl/` directory to the `rpmrepo` folder. + + ```bash + cp /opt/spectro/ssl/server.crt rpmrepo/ + ``` + +9. Open the **imageconfig** template file located in the `output` folder and fill in the required parameters. For a + complete list of parameters, refer to the [Configuration Reference](../../config-reference.md) page. Additionally, + refer to the [Compatibility Matrix](../../comp-matrix-capi-builder.md) for a list of supported Kubernetes versions + and their corresponding dependencies. + + The **imageconfig** is the file you use to set up the CAPI Image Builder according to your requirements. This + includes specifying the OS type, Kubernetes version, whether the image should be FIPS compliant, and more. + + Use the example configuration below for building a Rocky 8 CAPI image in an airgapped environment. Replace + `` with the Rocky ISO checksum. Replace the VMware-related placeholders with the values from your + VMware vSphere environment. Additionally, replace `` with the hostname or IP address of your + airgap support VM. + + :::warning + + If you used the airgap support VM hostname during the execution of the `airgap-setup.sh` script, ensure to enter the + VM's hostname in the `airgap_ip` parameter. The same applies if you used the VM’s IP address. + + ::: + + ```text {4-5,9,13,19-22,30-31,38-46,64-65} + # Define the OS type and version here + # os_version=rhel-8 | rhel-9 | rockylinux-8 | rockylinux-9 + # image_type=standard | fips + os_version=rockylinux-8 + image_type=standard + + # Define the image name + # image_name= + image_name=rocky-8 + + # Define the Cloud type + # cloud_type=vmware + cloud_type=vmware + + # Define the Component Versions + # + # containerd crictl and cni version update should be done + # only if the images are available in the upstream repositories + k8s_version=1.28.9 + cni_version=1.2.0 + containerd_version=1.7.13 + crictl_version=1.26.0 + + # Define RHEL subscription credentials(if $image_type=rhel) + # used while image creation to use package manager + # rhel_subscription_user= + # rhel_subscription_pass= + + # Define ISO url(if image is rhel or rockylinux) + iso_name=Rocky-8-latest-x86_64-dvd.iso + iso_checksum= + + # Define AWS infra details + aws_access_key= + aws_secret_key= + + # Define Vmware infra details + vcenter_server= + vcenter_user= + vcenter_password= + vcenter_datacenter= + vcenter_datastore= + vcenter_network= + vcenter_folder= + vcenter_cluster= + vcenter_resource_pool= + + # Optional: for OVA based builds + vcenter_template= + + # Define Azure infra details + azure_client_id= + azure_client_secret= + azure_subscription_id= + azure_location= + azure_storage_account= + azure_resource_group= + + # Define GCE infra details + google_app_creds= + gcp_project_id= + + # Airgap Configuration + airgap=true + airgap_ip= + ``` + + :::tip + + To build a FIPS-compliant image, set `image_type` to `fips`. + + ::: + + Once you are done making the alterations, save and exit the file. + +10. Load the CAPI Image Builder container image with the command below. + + + + + ```shell + docker load < capi-builder-v4.4.4.tar + ``` + + + + + ```shell + podman load < capi-builder-v4.4.4.tar + ``` + + + + +11. Load the Yum container image with the command below. The Yum container is used to serve the packages required by the + CAPI Image Builder. + + + + + ```shell + docker load < yum-repo-v1.0.0.tar + ``` + + + + + ```shell + podman load < yum-repo-v1.0.0.tar + ``` + + + + +12. Confirm that both container images were loaded correctly. + + + + + ```shell + docker images + ``` + ```text hideClipboard + REPOSITORY TAG IMAGE ID CREATED SIZE + gcr.io/spectro-images-public/imagebuilder/capi-builder v4.4.4 34ae97fee5e3 10 days ago 2.59 GB + gcr.io/spectro-images-public/imagebuilder/yum-repo v1.0.0 b03879039936 6 weeks ago 603 MB + ``` + + + + + ```shell + podman images + ``` + ```text hideClipboard + REPOSITORY TAG IMAGE ID CREATED SIZE + gcr.io/spectro-images-public/imagebuilder/capi-builder v4.4.4 34ae97fee5e3 10 days ago 2.59 GB + gcr.io/spectro-images-public/imagebuilder/yum-repo v1.0.0 b03879039936 6 weeks ago 603 MB + ``` + + + + +13. Start the Yum container and assign its ID to the `BUILD_ID_YUM` variable. + + + + + ```shell + BUILD_ID_YUM=$(docker run --volume /root/rpmrepo:/var/www/html/rpmrepo --publish 9000:80 --detach gcr.io/spectro-images-public/imagebuilder/yum-repo:v1.0.0) + ``` + + + + + ```shell + BUILD_ID_YUM=$(podman run --volume /root/rpmrepo:/var/www/html/rpmrepo --publish 9000:80 --detach gcr.io/spectro-images-public/imagebuilder/yum-repo:v1.0.0) + ``` + + + + +14. Execute the command below to visualize the Yum container logs. + + + + + ```shell + docker logs --follow $BUILD_ID_YUM + ``` + + Monitor the output until a `Pool finished` message appears, indicating that the process has completed successfully. + + ```text hideClipboard {7} + # Output condensed for readability + Directory walk started + Directory walk done - 53 packages + Temporary output repo path: /var/www/html/rpmrepo/.repodata/ + Preparing sqlite DBs + Pool started (with 5 workers) + Pool finished + ``` + + + + + ```shell + podman logs --follow $BUILD_ID_YUM + ``` + + Monitor the output until you see a `Pool finished` message, which indicates that the process has completed successfully. + + ```text hideClipboard {7} + # Output condensed for readability + Directory walk started + Directory walk done - 53 packages + Temporary output repo path: /var/www/html/rpmrepo/.repodata/ + Preparing sqlite DBs + Pool started (with 5 workers) + Pool finished + ``` + + + +15. Issue the following command to upload the airgap Kubernetes pack to the airgap registry. + + ```shell + chmod +x airgap-pack-kubernetes-1.28.9.bin && \ + ./airgap-pack-kubernetes-1.28.9.bin + ``` + +16. Start the CAPI Image Builder container and assign the container ID to the `BUILD_ID_CAPI` variable. The tool will + create and configure a VM named `rocky-8` with Dynamic Host Configuration Protocol (DHCP) in your VMware vSphere + environment. It will then generate a Rocky 8 CAPI image from the VM and save it to the `output` folder. + + + + + ```bash + BUILD_ID_CAPI=$(docker run --net=host --volume /root/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v4.4.4) + ``` + + + + + ```bash + BUILD_ID_CAPI=$(podman run --net=host --volume /root/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v4.4.4) + ``` + + + + + If you need the VM to use static IP placement instead of DHCP, follow the steps described below. + + +
+ CAPI Image Builder with Static IP Placement + + 1. Open the `ks.cfg` file located in the output folder. Find and replace the network line + `network --bootproto=dhcp --onboot=on --ipv6=auto --activate --hostname=capv.vm` with the configuration below. + + ```text + network --bootproto=static --ip= --netmask= --gateway= --nameserver= + ``` + + Then, replace `` with a valid IP address from your VMware vSphere environment, and + ``, ``, and `` with the correct values from your VMware vSphere + environment. + + Once you are finished doing the alterations, save and exit the file. + + 2. Issue the command below to start the CAPI Image Builder container and assign the container ID to the `BUILD_ID_CAPI` + variable. The tool will use the **imageconfig** file to create and configure a VM with static IP placement in + your VMware vSphere environment. + + + + + ```bash + BUILD_ID_CAPI=$(docker run --net=host --volume /home/ubuntu/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v1.5.0) + ``` + + + + + ```bash + BUILD_ID_CAPI=$(podman run --net=host --volume /home/ubuntu/output:/home/imagebuilder/output --detach gcr.io/spectro-images-public/imagebuilder/capi-builder:v1.5.0) + ``` + + + + +
+ +17. Execute the following command to view the CAPI Image Builder container logs and monitor the build progress. + + + + + ```shell + docker logs --follow $BUILD_ID_CAPI + ``` + + + + + + ```shell + podman logs --follow $BUILD_ID_CAPI + ``` + + + + + + :::info + + It may take a few minutes for the logs to start being displayed, and the build takes several minutes to complete. + + ::: + +18. Once the build is complete, the Rocky 8 CAPI image will be downloaded to a folder named `rocky-8` within the output + directory on your airgap support VM, and the CAPI Image Builder VM will be deleted from VMware vSphere. Issue the + command below to confirm that the build files are present in the output directory. + + ```shell + ls output/rocky-8 + ``` + + ```text hideClipboard + packer-manifest.json rockylinux-8-kube-v1.28.9.mf rockylinux-8-kube-v1.28.9.ovf rocky-8-disk-0.vmdk rockylinux-8-kube-v1.28.9.ova rocky-8.ovf rockylinux-8-kube-v1.28.9.ova.sha256 + ``` + +19. Copy the `rockylinux-8-kube-v1.28.9.ova` file to the home directory of the airgap support VM. + + ```shell + cp /root/output/rocky-8/rockylinux-8-kube-v1.28.9.ova /home/ubuntu/ + ``` + + Next, open a new terminal window on your local machine and use the `scp` command to copy the + `rockylinux-8-kube-v1.28.9.ova` file. Replace `/path/to/private_key` with the path to the private SSH key and + `palette.example.com` with the IP address or hostname of the airgap support VM. + + ```shell + scp -i /path/to/private_key ubuntu@palette.example.com:/home/ubuntu/rockylinux-8-kube-v1.28.9.ova . + ``` + +20. To make the image available in VMware vSphere, log in to your environment and locate the `vcenter_folder` you + defined in step **10** of this guide. + + :::info + + You can also use the following steps to make the image available in a VMware vSphere environment that is not + connected to the one you used for building the image. + + ::: + +21. Right-click the folder and select **Deploy OVF Template** to deploy a VM using the Rocky 8 OVA file that was built + in step **16** of this guide. + +22. In the **Deploy OVF Template** wizard, click **Local File**, then **Upload Files**, and select the + `rockylinux-8-kube-v1.28.9.ova` file from the folder on your local machine. Click **Next** to continue. + +23. Assign a name to the virtual machine, such as `rockylinux-8-kube-v1.28.9`, and select the folder you created + previously as the target location. Click **Next** to proceed. + +24. Select a compute resource and click **Next**. + +25. Review the VM configuration, accept the license agreements, and click **Next**. + +26. Select the storage location and network configuration and click **Next**. Then, click **Finish** to deploy the VM. + + :::warning + + It takes a while for the VM to deploy, approximately 45 minutes or more. The download of the OVA file takes up the + majority of the time. You can monitor the progress of this process in VMware vSphere by looking at the **Recent + Tasks** tab and filtering the **Task Name** column by `Deploy OVF Template`. + + ::: + +27. Once the VM is created, right-click it and select **Convert to Template**. This will convert the VM into a Rocky 8 + image template that you can reference during the cluster profile creation. + +## Create Cluster Profile + +The Rocky 8 image is now built and available in the VMware vSphere environment. You can use it to create a cluster +profile and deploy a VMware vSphere host cluster. + +19. Log in to your airgapped instance of Palette or VerteX and select **Profiles** from the left **Main Menu**. + +20. Click **Add Cluster Profile** and follow the wizard to create a new profile. + +21. In the **Basic Information** section, assign the cluster profile a name and a brief description, and select the type + as **Full**. Click **Next**. + +22. In the **Cloud Type** section, select **VMware** and click **Next**. + +23. The **Profile Layers** section is where you specify the packs that compose the profile. This guide uses the + following packs as an example. + + | Pack Name | Version | Layer | + | --------------------------- | ------- | ---------------- | + | BYOOS | 1.0.0 | Operating System | + | Palette eXtended Kubernetes | 1.28.9 | Kubernetes | + | Calico | 3.28.0 | Network | + | vSphere CSI | 3.2.0 | Storage | + + + Reference the custom Rocky 8 image template path in your VMware vSphere environment when populating the pack details + for the layer. For example, in the code snippet below, `/Datacenter/vm/sp-docs/rockylinux-8-kube-v1.28.9` is the vSphere path to the image. + + ```yaml + pack: + osImageOverride: "/Datacenter/vm/sp-docs/rockylinux-8-kube-v1.28.9" + osName: "rockylinux" + osVersion: "8" + ``` + + As you fill out the information for each layer, click **Next** to proceed. + + :::warning + + The Palette eXtended Kubernetes pack version must match the Kubernetes version specified in the **imageconfig** + file. + + ::: + +24. Review the profile layers and click **Finish Configuration** to create the cluster profile. + +25. Deploy a VMware host cluster using the created cluster profile. Refer to the + [Create and Manage VMware Clusters](../../../../clusters/data-center/vmware/create-manage-vmware-clusters.md) guide + for instructions on deploying a VMware host cluster. + +## Validate + +1. Log in to the VMware vSphere environment and navigate to the **Inventory** view. + +2. Select the **VMs and Templates** tab and verify the custom Rocky 8 image is available. diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/build-image-vmware.md b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/build-image-vmware.md index e924c53451..9581826843 100644 --- a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/build-image-vmware.md +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/build-image-vmware.md @@ -8,10 +8,11 @@ sidebar_position: 20 tags: ["operating system", "byoos", "capi iamge builder"] --- -This page contains guides on how to use the CAPI Image Builder tool to create images for Palette and VerteX. The CAPI -Image Builder can be used to build images for Kubernetes clusters deployed through Palette and VerteX that target VMware -vSphere. We encourage you to review the [Configuration Reference](../config-reference.md) and -[Compatibility Matrix](../comp-matrix-capi-builder.md) for more information on how to configure the CAPI Image Builder. +This section contains guides on how to use the CAPI Image Builder tool to create images for Palette and VerteX. The CAPI +Image Builder can be used in both airgapped and connected environments to build images for Kubernetes clusters deployed +through Palette and VerteX that target VMware vSphere. We encourage you to review the +[Configuration Reference](../config-reference.md) and [Compatibility Matrix](../comp-matrix-capi-builder.md) for more +information on how to configure the CAPI Image Builder. :::preview @@ -19,6 +20,6 @@ vSphere. We encourage you to review the [Configuration Reference](../config-refe ## Resources -- [RHEL and PXK](./rhel-capi.md) +- [Non-Airgap CAPI Image Build](./non-airgap-build/non-airgap-build.md) -- [Rocky and PXK](./rocky-capi.md) +- [Airgap CAPI Image Build](./airgap-build/airgap-build.md) diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/_category_.json b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/_category_.json new file mode 100644 index 0000000000..094470741d --- /dev/null +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/_category_.json @@ -0,0 +1,3 @@ +{ + "position": 10 +} diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/non-airgap-build.md b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/non-airgap-build.md new file mode 100644 index 0000000000..5fcfd7aa76 --- /dev/null +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/non-airgap-build.md @@ -0,0 +1,22 @@ +--- +sidebar_label: "Non-Airgap Build" +title: "Non-Airgap CAPI Image Build" +description: + "Learn how to use the CAPI Image Builder to create images for Palette and VerteX in connected environments." +icon: "" +hide_table_of_contents: false +sidebar_position: 20 +tags: ["operating system", "byoos", "capi iamge builder"] +--- + + +The CAPI Image Builder can be used in connected environments to build images for Kubernetes clusters deployed through Palette and VerteX that use VMware vSphere as the infrastructure provider. Review the guides below for examples on how to build custom [Rocky Linux](https://rockylinux.org/) and [Red Hat Enterprise Linux (RHEL)](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux) images with . + +:::preview + +::: + +## Resources + +- [RHEL and PXK](./rhel-capi.md) +- [Rocky and PXK](./rocky-capi.md) diff --git a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/rhel-capi.md b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/rhel-capi.md similarity index 96% rename from docs/docs-content/byoos/capi-image-builder/build-image-vmware/rhel-capi.md rename to docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/rhel-capi.md index 6f34851803..2016d37627 100644 --- a/docs/docs-content/byoos/capi-image-builder/build-image-vmware/rhel-capi.md +++ b/docs/docs-content/byoos/capi-image-builder/build-image-vmware/non-airgap-build/rhel-capi.md @@ -10,7 +10,7 @@ tags: ["operating system", "byoos", "profiles", "pxk", "vmware"] --- -This guide will teach you how to use the [CAPI Image Builder](../capi-image-builder.md) tool to create a custom Red Hat +This guide teaches you how to use the [CAPI Image Builder](../../capi-image-builder.md) tool to create a custom Red Hat Enterprise Linux (RHEL) image with for VMware vSphere and then use this image to create a cluster profile. :::preview @@ -98,7 +98,7 @@ Enterprise Linux (RHEL) image with -This guide will teach you how to use the [CAPI Image Builder](../capi-image-builder.md) tool to create a custom +This guide teaches you how to use the [CAPI Image Builder](../../capi-image-builder.md) tool to create a custom [Rocky Linux](https://rockylinux.org/) image with for VMware vSphere and then use this image to create a cluster profile. :::preview @@ -91,7 +91,7 @@ This guide will teach you how to use the [CAPI Image Builder](../capi-image-buil 4. Download the Rocky Linux ISO file into the output directory. Ensure you download the **x86_64 DVD ISO** and not the **x86_64 BOOT ISO**. - This guide uses Rocky 8 as an example. Refer to the [Configuration Reference](../config-reference.md) page for + This guide uses Rocky 8 as an example. Refer to the [Configuration Reference](../../config-reference.md) page for details on supported operating systems. ```shell @@ -118,9 +118,9 @@ This guide will teach you how to use the [CAPI Image Builder](../capi-image-buil ``` 7. Open the **imageconfig** template file in an editor of your choice and fill in the required parameters. For a - complete list of parameters, refer to the [Configuration Reference](../config-reference.md) page. Additionally, - refer to the [Compatibility Matrix](../comp-matrix-capi-builder.md) for a list of supported Kubernetes versions and - their corresponding dependencies. + complete list of parameters, refer to the [Configuration Reference](../../config-reference.md) page. Additionally, + refer to the [Compatibility Matrix](../../comp-matrix-capi-builder.md) for a list of supported Kubernetes versions + and their corresponding dependencies. The **imageconfig** is the file you use to set up the CAPI Image Builder according to your requirements. This includes specifying the OS type, Kubernetes version, whether the image should be FIPS compliant, and more. @@ -390,9 +390,9 @@ profile and deploy a VMware host cluster. ```yaml pack: - osImageOverride: "/Datacenter/vm/sp-docs/rockylinux-8-kube-v1.28.9" - osName: "rockylinux" - osVersion: "8" + osImageOverride: "/Datacenter/vm/sp-docs/rockylinux-8-kube-v1.28.9" + osName: "rockylinux" + osVersion: "8" ``` As you fill out the information for each layer, click **Next** to proceed. @@ -407,7 +407,7 @@ profile and deploy a VMware host cluster. 24. Review the profile layers and click **Finish Configuration** to create the cluster profile. 25. Deploy a VMware host cluster using the created cluster profile. Refer to the - [Deploy App Workloads with a PCG](../../../tutorials/cluster-deployment/pcg/deploy-app-pcg.md) tutorial for + [Deploy App Workloads with a PCG](../../../../tutorials/cluster-deployment/pcg/deploy-app-pcg.md) tutorial for instructions on deploying a VMware host cluster. ## Validate diff --git a/docs/docs-content/byoos/capi-image-builder/comp-matrix-capi-builder.md b/docs/docs-content/byoos/capi-image-builder/comp-matrix-capi-builder.md index 212722d896..a3bc5fe0e6 100644 --- a/docs/docs-content/byoos/capi-image-builder/comp-matrix-capi-builder.md +++ b/docs/docs-content/byoos/capi-image-builder/comp-matrix-capi-builder.md @@ -16,3 +16,4 @@ dependencies. | 1.27.13 | `cni_version` = 1.2.0
`containerd_version` = 1.7.13
`crictl_version` = 1.26.0 | | 1.28.9 | `cni_version` = 1.2.0
`containerd_version` = 1.7.13
`crictl_version` = 1.26.0 | | 1.29.4 | `cni_version` = 1.3.0
`containerd_version` = 1.7.13
`crictl_version` = 1.28.0 | +| 1.30.4 | `cni_version` = 1.3.0
`containerd_version` = 1.7.13
`crictl_version` = 1.28.0 | diff --git a/docs/docs-content/byoos/capi-image-builder/config-reference.md b/docs/docs-content/byoos/capi-image-builder/config-reference.md index 73ae94ae0a..424e8591ae 100644 --- a/docs/docs-content/byoos/capi-image-builder/config-reference.md +++ b/docs/docs-content/byoos/capi-image-builder/config-reference.md @@ -110,16 +110,10 @@ create a separate configuration file for each. Fill out the parameters below if you are building the image in an air-gapped environment. Otherwise, you can skip this section. -| Parameter | Description | Required | -| ------------------- | -------------------------------------------------------------------------------- | -------- | -| `airgap` | Set to `true` if you are building the image in an air-gapped environment. | Yes | -| `airgap_ip` | The IP address of the machine that has the required dependencies. | Yes | -| `k8s_rpm_key` | The GPG key to use when installing the Kubernetes RPMs. | Yes | -| `k8s_rpm_server` | The IP address or FQDN of the server to use when installing the Kubernetes RPMs. | Yes | -| `containerd_url` | The URL to use when downloading the containerd binary. | Yes | -| `crictl_url` | The URL to use when downloading the crictl binary. | Yes | -| `k8s_container_reg` | The URL of the container registry to use when downloading the Kubernetes images. | Yes | -| `cert_url` | The URL to use when downloading the certificate file. | Yes | +| Parameter | Description | Required | +| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | +| `airgap` | Set to `true` if you are building the image in an air-gapped environment. | Yes | +| `airgap_ip` | The IP address or hostname of the airgap support VM that has the required dependencies. Refer to the [Self-Hosted Palette](../../enterprise-version/install-palette/install-on-vmware/airgap-install/vmware-vsphere-airgap-instructions.md) and [Vertex](../../vertex/install-palette-vertex/install-on-vmware/airgap-install/vmware-vsphere-airgap-instructions.md) Environment Setup pages for instructions on how to deploy an airgap support VM. | Yes | ## Example Configuration diff --git a/docs/docs-content/clusters/cluster-management/certificate-management.md b/docs/docs-content/clusters/cluster-management/certificate-management.md index f30b868f9b..cca8ad5876 100644 --- a/docs/docs-content/clusters/cluster-management/certificate-management.md +++ b/docs/docs-content/clusters/cluster-management/certificate-management.md @@ -1,24 +1,21 @@ --- -sidebar_label: "Certificate Management" -title: "Certificate Management" -description: "Learn how to manage the cluster certificates through Palette." +sidebar_label: "Renew Cluster PKI Certificates" +title: "Renew Cluster PKI Certificates" +description: "Learn about auto-renewal of control certificates in Palette and how to renew the certificates manually. " hide_table_of_contents: false sidebar_position: 50 tags: ["clusters", "cluster management"] --- -Palette installs Kubernetes through the tool, [kubeadm](https://kubernetes.io/docs/reference/setup-tools/kubeadm). As a -result, all deployed clusters include auto-generated Public Key Infrastructure (PKI) certificates created by kubeadm. We -recommend you review the -[PKI certificates and requirement](https://kubernetes.io/docs/setup/best-practices/certificates) Kubernetes -documentation to learn more about the auto-generated certificates and to better understand their purpose. +In Kubernetes, Public Key Infrastructure (PKI) certificates are used to secure communications and authenticate +components within the cluster. Certificates have an expiry date and need to be renewed periodically. You can view the +issue and expiry date of the cluster by click on **View K8s Certificates** in the cluster details page. -This reference page focuses on how to renew the PKI certificates through Palette. You have two options for how you can -renew the cluster PKI certificates: +This page focuses on how to renew the PKI certificates through Palette. You have two options for how you can renew the +cluster PKI certificates: -- Automatic Certificate Renewal - -- Manual Certificate Renewal +- [Automatic Certificate Renewal](#automatic-certificate-renewal) +- [Manual Certificate Renewal](#manual-certificate-renewal) :::info @@ -27,19 +24,30 @@ years. ::: -You can learn more about each option in the following sections. +## Certificate Renewal Impact on Cluster Availability + +After the new certificates are generated, the cluster needs to restart the control plane components in order to pick up +the new certificates. Depending on your cluster structure, this restart period may impact the cluster management +availability of your cluster, but will not affect your cluster workloads: + +- If you have a single-node control plane, this will cause a short period of downtime for the control plane components, + meaning that cluster management availability will be temporarily impacted. However, your worker nodes will continue to + operate normally in the meantime and their workloads will not be impacted. +- If you have three nodes or more in your control plane, certificate renewal will not cause downtime for neither the + control plane components nor worker nodes. ## Limitations -- Neither automatic nor manual certificate renewal through the Palette UI is supported by Edge clusters. For Edge airgap - clusters, you can renew the certificates from Local UI. Refer to - [Renew Certificates for Airgapped Edge Hosts](../edge/cluster-management/certificate-renewal.md) for more information. +- Both automatic and manual certificate renewal will renew control plane certificates only. Worker node certificate + renewal is not supported. + +- Airgapped Edge clusters are not managed by Palette. To renew the certificates for airgapped Edge clusters, refer to + [Renew Certificates for Airgap Clusters](../edge/cluster-management/certificate-renewal.md). ## Automatic Certificate Renewal -Palette will automatically update the cluster PKI certificates 30 days before they expire. The automatic renewal process -will not cause a cluster repave. The automatic renewal process will only renew the certificates for the control plane -nodes. +Palette will automatically update the cluster PKI certificates 30 days before they expire. You can view the issue and +expiry date of the cluster by clicking on **View K8s Certificates** in the cluster details page. Another scenario that results in new PKI certificates is upgrading a cluster's Kubernetes version. Upgrading a cluster's Kubernetes version, whether a minor patch or a major release, results in renewed PKI certificates. We recommend @@ -99,14 +107,10 @@ method, using the Palette UI or the API. 4. From the cluster details page, click on **View K8s Certificates**. -
- ![A view of the Palette UI with an arrow pointing to the **View K8s Certificates** button.](/clusters_cluster-management_certificate-management_cluster-details-page.webp) 5. Next, select **Renew All** to start the renewal process. -
- ![A view of the cluster certificates displaying the expiration date](/clusters_cluster-management_certificate-management_certificate-renew-page.webp) The renewal process may take several minutes, depending on the number of cluster nodes. @@ -116,46 +120,38 @@ The renewal process may take several minutes, depending on the number of cluster 1. Set your Palette API key as an environment variable. Add your actual API key in place of `REPLACE_ME`. -
- -```shell -export API_KEY=REPLACE_ME -``` + ```shell + export API_KEY=REPLACE_ME + ``` 2. Set the project ID as an environment variable. Add your project ID in place of `REPLACE_ME`. You can find the project ID on the Palette landing page. The project ID is displayed in the top right corner of the page. -
- -```shell -export PROJECT_ID=REPLACE_ME -``` + ```shell + export PROJECT_ID=REPLACE_ME + ``` 3. Set the cluster ID as an environment variable. Add your cluster's ID in place of `REPLACE_ME`. You can get the cluster ID from the cluster detail's page URL. The value after `clusters/` is the cluster ID. -
- -```shell -export CLUSTER_ID=REPLACE_ME -``` + ```shell + export CLUSTER_ID=REPLACE_ME + ``` 4. Use the Palette API endpoint `https://api.spectrocloud.com/v1/spectroclusters/{uid}/k8certificates/renew` to renew a cluster's PKI certificates. The endpoint accepts the HTTP method `PATCH`, and the only required parameter is the cluster ID. -
- -```shell -curl --request PATCH \ - --url 'https://api.spectrocloud.com/v1/spectroclusters/$CLUSTER_ID/k8certificates/renew' \ - --header 'Content-Type: application/json' \ - --header 'Accept: application/json' \ - --header "ApiKey: $API_KEY" \ - --header "ProjectUid: $PROJECT_ID" -``` + ```shell + curl --request PATCH \ + --url 'https://api.spectrocloud.com/v1/spectroclusters/$CLUSTER_ID/k8certificates/renew' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header "ApiKey: $API_KEY" \ + --header "ProjectUid: $PROJECT_ID" + ``` -3. No output is returned and an HTTP status `204` is expected. +5. No output is returned and an HTTP status `204` is expected. The renewal process may take several minutes, depending on the number of cluster nodes. @@ -170,8 +166,6 @@ The renewal process may take several minutes, depending on the number of cluster Using the following steps, you can validate that the cluster's PKI certificates were renewed. -
- 1. Log in to [Palette](https://console.spectrocloud.com). 2. Navigate to the left **Main Menu** and select **Clusters**. @@ -188,198 +182,95 @@ Using the following steps, you can validate that the cluster's PKI certificates Using the following steps, you can validate that the cluster's PKI certificates were renewed. -
- 1. Set your Palette API key as an environment variable. Add your actual API key in place of `REPLACE_ME`. -
- -```shell -export API_KEY=REPLACE_ME -``` + ```shell + export API_KEY=REPLACE_ME + ``` 2. Set the project ID as an environment variable. Add your project ID in place of `REPLACE_ME`. -
- -```shell -export PROJECT_ID=REPLACE_ME -``` + ```shell + export PROJECT_ID=REPLACE_ME + ``` 3. Set the cluster ID as an environment variable. Add your cluster's ID in place of `REPLACE_ME`. -
- -```shell -export CLUSTER_ID=REPLACE_ME -``` + ```shell + export CLUSTER_ID=REPLACE_ME + ``` 4. Retrieve the cluster's certificate information from Palette by using the `https://api.spectrocloud.com/v1/spectroclusters/{uid}/k8certificates` endpoint. -
- -```shell -curl \ - --url 'https://api.spectrocloud.com/v1/spectroclusters/$CLUSTER_ID/k8certificates' \ - --header 'Content-Type: application/json' \ - --header 'Accept: application/json' \ - --header "ApiKey: $API_KEY" \ - --header "ProjectUid: $PROJECT_ID" -``` + ```shell + curl \ + --url 'https://api.spectrocloud.com/v1/spectroclusters/$CLUSTER_ID/k8certificates' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header "ApiKey: $API_KEY" \ + --header "ProjectUid: $PROJECT_ID" + ``` 5. Validate the output and confirm the expiration date is one year away. -
- -```json hideClipboard -{ - "machineCertificates": [ - { - "certificateAuthorities": [ - { - "certificates": [ - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "front-proxy-client" - } - ], - "expiry": "2033-05-23T16:45:22.209Z", - "name": "front-proxy-ca" - }, - { - "certificates": [ - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "kube-apiserver" - }, - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "kube-apiserver-kubelet-client" - } - ], - "expiry": "2033-05-23T16:45:22.209Z", - "name": "ca" - }, - { - "certificates": [ - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "kube-apiserver-etcd-client" - }, - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "kube-etcd-healthcheck-client" - }, - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "kube-etcd-peer" - }, - { - "expiry": "2024-05-23T16:51:05.000Z", - "name": "kube-etcd-server" - } - ], - "expiry": "2033-05-23T16:45:22.209Z", - "name": "etcd-ca" - } - ], - "name": "ip-10-0-1-120.ec2.internal" - } - ] -} -``` + ```json hideClipboard + { + "machineCertificates": [ + { + "certificateAuthorities": [ + { + "certificates": [ + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "front-proxy-client" + } + ], + "expiry": "2033-05-23T16:45:22.209Z", + "name": "front-proxy-ca" + }, + { + "certificates": [ + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "kube-apiserver" + }, + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "kube-apiserver-kubelet-client" + } + ], + "expiry": "2033-05-23T16:45:22.209Z", + "name": "ca" + }, + { + "certificates": [ + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "kube-apiserver-etcd-client" + }, + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "kube-etcd-healthcheck-client" + }, + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "kube-etcd-peer" + }, + { + "expiry": "2024-05-23T16:51:05.000Z", + "name": "kube-etcd-server" + } + ], + "expiry": "2033-05-23T16:45:22.209Z", + "name": "etcd-ca" + } + ], + "name": "ip-10-0-1-120.ec2.internal" + } + ] + } + ``` - -
- -## Advanced - Only Renew Control Plane Nodes - -You can configure Palette to only renew the PKI certificates for the control plane nodes. You can achieve this by using -the annotation `spectrocloud.com/cert-renew-controlplane-only` and setting the value to `true`. To enable this behavior, -you must use `kubectl` and apply the update to a Custom Resource Definition (CRD) created by Palette during the cluster -deployment process. - -Use the following steps to configure Palette only to renew the certificates for control plane nodes. - -### Prerequisites - -- Kubectl is installed in your system. - -- A host cluster deployed. - -- Access to the host cluster's kubeconfig file. Refer to the [Access Cluster with CLI](palette-webctl.md) guide to learn - how to use your cluster's kubeconfig file. - -### Configure Cluster - -1. Set your cluster name as an environment variable. Add your cluster's name in place of `REPLACE_ME`. - -
- -```shell -export CLUSTER_NAME=REPLACE_ME -``` - -1. Use the following command to retrieve the namespace of the CRD Palette created in your cluster. - -
- -```shell -namespace=$(kubectl get spc --all-namespaces --output jsonpath='{range .items[?(@.metadata.name=="'"$CLUSTER_NAME"'")]}{.metadata.namespace}{"\n"}{end}') -``` - -2. Use `kubectl` to update the CRD to include the `spectrocloud.com/cert-renew-controlplane-only` annotation. - -
- -```shell -kubectl annotate spc/certificate-renew --namespace $namespace spectrocloud.com/cert-renew-controlplane-only="true" -``` - -3. Verify the annotation was set correctly with the command below. The expected output is `true`. - -
- -```shell -kubectl get spc/$CLUSTER_NAME --namespace $(kubectl get spc --all-namespaces --output jsonpath='{range .items[?(@.metadata.name=="'"$CLUSTER_NAME"'")]}{.metadata.namespace}{"\n"}{end}') --output jsonpath='{.metadata.annotations.spectrocloud\.com/cert-renew-controlplane-only}' -``` - -Output - -``` -true -``` - -4. Next, trigger a certificate renewal using either [Automatic Certificate Renewal](#automatic-certificate-renewal) or - [Manual Certificate Renewal](#manual-certificate-renewal). - -The renewal process may take several minutes, depending on the number of cluster nodes. - -### Validate - -Using the following steps, you can validate that the cluster's PKI certificates are renewed only for the control plane -nodes. - -
- -1. Log in to [Palette](https://console.spectrocloud.com). - -2. Navigate to the left **Main Menu** and select **Clusters**. - -3. Select the host cluster to renew its PKI certificates. - -4. From the cluster details page, click on **View K8s Certificates**. - -5. Review the expiration date for each component. Each component's expiration date will have a status of **365d** with a - date that is one year away. - -6. Navigate to the **Nodes** tab and verify the **Worker Pool** nodes' **Age** is not updated recently. - -
- -![View of the cluster nodes where only the control plane nodes are modified](/clusters_cluster-management_certificate-management_control-plane-only-change.webp) - -
diff --git a/docs/docs-content/clusters/cluster-management/cluster-management.md b/docs/docs-content/clusters/cluster-management/cluster-management.md index c3e1dc28e8..f4b543b5f4 100644 --- a/docs/docs-content/clusters/cluster-management/cluster-management.md +++ b/docs/docs-content/clusters/cluster-management/cluster-management.md @@ -27,8 +27,8 @@ The following sections describe these capabilities in detail: ability to have these alerts pushed out to a variety of channels. Users can set up email alerts to receive an email when the health status of their cluster changes. -- [Certificate Management](certificate-management.md) - You can renew cluster certificates on-demand or leverage the - automatic cluster update process to handle certificate renewal operations. +- [Renew Cluster PKI Certificates](certificate-management.md) - You can renew cluster certificates on-demand or leverage + the automatic cluster update process to handle certificate renewal operations. - [Cluster Monitoring](monitoring/deploy-monitor-stack.md) - Monitor your cluster resources by collecting and reviewing metrics. diff --git a/docs/docs-content/clusters/cluster-management/node-pool.md b/docs/docs-content/clusters/cluster-management/node-pool.md index 5e7a7a3d57..97ab8fa5bc 100644 --- a/docs/docs-content/clusters/cluster-management/node-pool.md +++ b/docs/docs-content/clusters/cluster-management/node-pool.md @@ -61,6 +61,26 @@ cluster repaves. ::: +### Pod Drainage Toleration + +Palette will not remove pods with the toleration key `node.kubernetes.io/unschedulable` and the effect `NoSchedule` +during node draining operations. You can add this toleration to your pods to prevent them from being removed during a +repave operation. + +```yaml +tolerations: + - key: node.kubernetes.io/unschedulable + effect: NoSchedule + operator: Exists +``` + +Adding the `node.kubernetes.io/unschedulable` toleration to your pods can be useful in scenarios where you have pods +that behave as _DeamonSets_ and should not be removed during a repave operation. You can use this toleration to ensure +that these pods are not removed during a repave operation. + +You can also specify other tolerations during the cluster creation process. For more information on adding tolerations, +refer to the [Taints and Tolerations](./taints.md) guide. + ## Node Pool Configuration Settings The following tables contain the configuration settings for node pools. Depending on the type of node pool, some of the diff --git a/docs/docs-content/clusters/cluster-management/taints.md b/docs/docs-content/clusters/cluster-management/taints.md index f1228a786f..2558b62df8 100644 --- a/docs/docs-content/clusters/cluster-management/taints.md +++ b/docs/docs-content/clusters/cluster-management/taints.md @@ -57,6 +57,14 @@ Taints can also be applied to node pools using the Spectro Cloud [Taints and Tolerations](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) official documentation page for more details. + :::tip + + By default, Palette will not remove pods with the toleration key `node.kubernetes.io/unschedulable` set to + `NoSchedule`. For more information, refer to the [Pod Drainage Toleration](./node-pool.md#pod-drainage-toleration) + section + + ::: + - Specify a custom **key** and custom **value**. - Palette supports the `Equal` **operator**. - The **effect** defines what will happen to the pods that do not tolerate a taint. Kubernetes provides three taint diff --git a/docs/docs-content/clusters/clusters.md b/docs/docs-content/clusters/clusters.md index 73eb7f5cca..0c57e39d15 100644 --- a/docs/docs-content/clusters/clusters.md +++ b/docs/docs-content/clusters/clusters.md @@ -334,6 +334,44 @@ at the tenant scope. ::: +## Cluster Grid View + +On the **Clusters** page, you can view all clusters within a given scope in a grid view that displays the clusters with +their attributes. You can customize the grid by applying filters, removing and adding columns, pinning columns, as well +as ordering the clusters by certain attributes. + +### Cluster Attributes + +The following are the attributes of a cluster that are displayed in the cluster grid view. + +| Attribute | Description | Support Order-by | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | +| Type | The cluster type. Possible values are "Palette-managed" or "Imported." When there is a small green arrow on the icon, it means there are pending updates to the cluster that requires acknowledgement. | No | +| Env | The infrastructure provider of the cluster, such as AWS, Azure, GCP and Edge. | Yes | +| Name | The name of the cluster. | Yes | +| Status | The status of the cluster. Possible values include "Pending," "Running," "Deleting" and "Provisioning." | Yes | +| Last Modified | The date and time when the cluster was last modified. | Yes | +| Health | The health status of the cluster. Refer to [Cluster Health](#cluster-health) for details. | Yes | +| Heathy Nodes | The number of healthy nodes in the cluster. | No | +| CPU | The CPU usage of the cluster. | No | +| Memory | The memory usage of the cluster. | No | +| Architecture | The processor architecture of the cluster. | No | +| Tags | The tags on the cluster. | No | + +### Organize Cluster Grid + +You can take the following actions to organize your clusters in the grid view. + +![Screenshot of cluster grid view with arrows pointing to the areas where actions to organize the gride view can be performed. ](/clusters_clusters_cluster-grid-view.webp) + +| Action | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Reorder Columns | Click on the gear icon at the top right corner of the grid. In the list of scrollable columns, drag and drop the six dots icon to the left of each list item to reorder the columns. | +| Remove Column From View | Click on the gear icon at the top right corner of the grid. In the list of scrollable columns, uncheck the columns you want to hide from view. | +| Pin a Column | Click on the gear icon at the top right corner of the grid. In the list of scrollable columns, click on the pin icon to the right of the list item you want to pin. | +| Order by a Column | Click on the label row of the column you want to order by alphanumeric order. You can click it again to change the sort order. You can only sort by one column at a time. | +| Filter by Attribute | Click on **Add Filter** above the cluster grid and choose an existing filter or define a custom filter to apply to the clusters. | + ## Resources - [Public Cloud Clusters](./public-cloud/public-cloud.md) diff --git a/docs/docs-content/clusters/edge/cluster-management/certificate-renewal.md b/docs/docs-content/clusters/edge/cluster-management/certificate-renewal.md index f4bb9d7a2f..a31eabdb47 100644 --- a/docs/docs-content/clusters/edge/cluster-management/certificate-renewal.md +++ b/docs/docs-content/clusters/edge/cluster-management/certificate-renewal.md @@ -1,6 +1,6 @@ --- -sidebar_label: "Renew Certificates for Air-gap Clusters" -title: "Renew Certificates for Air-gap Clusters" +sidebar_label: "Renew Certificates for Airgap Clusters" +title: "Renew Certificates for Airgap Clusters" description: "Learn how to renew certificates for different Kubernetes components in your cluster." hide_table_of_contents: false sidebar_position: 80 @@ -11,8 +11,10 @@ Kubernetes uses SSL certificates to secure the communication between different c certificates allows Kubernetes to secure API connections, verify the authenticity of the nodes, and encrypt connections. All certificates have an expiry date, and need to be renewed periodically. -This page guides you through the different methods used to renew certificates in an air-gapped Palette Edge cluster. An -air-gapped cluster means a cluster that has no connection to a Palette instance. +This page guides you through the different methods used to renew certificates in an airgapped Palette Edge cluster. An +airgapped cluster means a cluster that has no connection to a Palette instance. For information on how to renew +certificates on connected Edge clusters, refer to +[Renew Cluster PKI Certificates](../../cluster-management/certificate-management.md). ## Limitations @@ -27,7 +29,7 @@ expire. You can follow the steps below to check when the next automatic renewal ### Prerequisite -- You have an active cluster in a air-gapped Edge host. +- You have an active cluster in a airgapped Edge host. - You have access to Local UI for the Edge host. For more information, refer to [Access Local UI](../local-ui/host-management/access-console.md). @@ -58,7 +60,7 @@ Management API. ### Prerequisite -- You have an active cluster in a air-gapped Edge host. +- You have an active cluster in a airgapped Edge host. - You have access to Local UI for the Edge host. For more information, refer to [Access Local UI](../local-ui/host-management/access-console.md). diff --git a/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md b/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md index 13856acbc2..5e80480533 100644 --- a/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md +++ b/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md @@ -77,7 +77,7 @@ The `stylus.site` blocks accept the following parameters. | `stylus.site.prefix` | A prefix prepended to the Edge device hostname to form the Edge device ID. Only alphanumeric characters and the hyphen-minus character are allowed. By default, this value is set to `edge`. | | | `stylus.site.projectName` | The name of the project. | | | `stylus.site.projectUid` | The ID of the project the Edge host will belong to. | | -| `stylus.site.registrationURL` | The URL that operators should use to register the Edge host with Palette. | | +| `stylus.site.registrationURL` | The URL that operators use to register the Edge host with Palette. | | | `stylus.site.tags` | A parameter object you use to provide optional key-value pairs. Refer to the [Tags](#tags) section to learn more. | | | `stylus.site.tagsFromFile` | Specify tags from a file. Refer to the [Tags](#tags) section to learn more. | | | `stylus.site.tagsFromScript` | Use a script to generate the tags. Refer to the [Tags](#tags) section to learn more. | | diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/cluster-management.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/cluster-management.md index 9241411b54..b9e687d784 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/cluster-management.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/cluster-management.md @@ -11,6 +11,11 @@ Local UI allows you to upload content bundles to the Edge host. The content in t create a single-node cluster consisting of the Edge host itself. You can also import cluster definitions, which is a bundle of one or more cluster profiles and their profile variables, from Palette to define your Edge cluster. +Cluster operations in Local UI are only available to airgapped Edge hosts. You cannot use Local UI to create or manage +clusters, upload content bundles, or cluster definition on a connected Edge host. You must use Palette to manage the +cluster instead. For more information, refer to +[Create Cluster Definition](../../site-deployment/cluster-deployment.md). + :::preview ::: diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md index ae7db5fbfb..ce4e493ba6 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md @@ -7,8 +7,8 @@ sidebar_position: 30 tags: ["edge"] --- -You can create and manage a single-node cluster locally from Local UI. This page guides you through how to create a -cluster using Local UI. +You can create and manage a single-node cluster on an airgapped Edge host locally from Local UI. This page guides you +through how to create a cluster using Local UI. :::preview diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md index 7e87b4fb90..f1525cfebc 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md @@ -20,6 +20,9 @@ Silicon, use the API approach instead. ## Export Cluster Definition with Palette Edge CLI +You can export cluster definitions with the Palette Edge CLI. This approach allows you to create a content bundle at the +same time in a single command. + ### Prerequisites - At least one [cluster profile](/docs/docs-content/profiles/cluster-profiles/cluster-profiles.md) in Palette. @@ -162,6 +165,9 @@ Silicon, use the API approach instead. ## Export Cluster Definition with Palette API +If you do not have an AMD64 machine, or you do not want to download and use the Palette Edge CLI, you can still export +cluster definitions using the Palette API. + ### Prerequisites - At least one [cluster profile](/docs/docs-content/profiles/cluster-profiles/cluster-profiles.md) in Palette. diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md index 4a0f1e645c..edafb71903 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md @@ -7,8 +7,8 @@ sidebar_position: 40 tags: ["edge"] --- -You can update existing local clusters from Local UI by uploading a new cluster profile version. This guide explains how -to update an existing cluster in Local UI. +You can update existing local clusters in an airgapped Edge host from Local UI by uploading a new cluster profile +version. This guide explains how to update an existing cluster in Local UI. :::preview diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md index 588cd20c41..e8ec93c3dd 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md @@ -7,9 +7,9 @@ sidebar_position: 60 tags: ["edge"] --- -You can build a content bundle and upload it to an Edge host through Local UI. The content you upload can include -images, helm charts, and packs. This allows you to provision clusters locally using the content you upload to the Edge -host when the host does not have a connection to a central Palette instance or an image repository. +You can build a content bundle and upload it to an airgapped Edge host through Local UI. The content you upload can +include images, helm charts, and packs. This allows you to provision clusters locally using the content you upload to +the Edge host when the host does not have a connection to a central Palette instance or an image repository. This page guides you through how to build a content bundle and upload it to an Edge host using the Edge management console. diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/access-console.md b/docs/docs-content/clusters/edge/local-ui/host-management/access-console.md index d5fd5ee94f..3dc4a4daf6 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/access-console.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/access-console.md @@ -22,13 +22,6 @@ This page guides you through how access the console, and log in, and manage your - An Edge host installed with Edge Installer 4.3 or later. -- The Edge host does not have a connection to a Palette instance and the installation is conducted with the - `installationMode` parameter set to `airgap`. For more information, refer to - [Installer Configuration](../../edge-configuration/installer-reference.md). - -- You have completed or skipped the initial configuration of the Edge host. For more information, refer to - [Edge Host Initial Configuration](../../site-deployment/site-installation/initial-setup.md). - - Network access to the Edge host's port where Local UI is exposed. The default port is 5080. - Credentials to log in to Local UI. Any Operating System (OS) user can be used to log into Local UI. diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/audit-logs.md b/docs/docs-content/clusters/edge/local-ui/host-management/audit-logs.md index 09a2c5930c..bb0a591140 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/audit-logs.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/audit-logs.md @@ -22,10 +22,6 @@ Palette agent's logs to another file if you want to collect the logs in a differ By default, you can view one year's worth of audit logs in Local UI. Log files past the one year mark will be rotated out and archived. You can still download your log files from any period, but they will not be viewable in Local UI. -### Limitations - -- This feature is only available to airgapped Edge hosts without a connection to Palette. - ### Prerequisites - You must have configured your application to write logs to `syslog` with a given facility and severity level. We @@ -146,7 +142,11 @@ entries that were not configured to be displayed in Local UI. ### Prerequisites -- An active Edge host installed in the `airgap` mode. +- An Edge host installed with Edge Installer 4.3 or later. + +- Network access to the Edge host's port where Local UI is exposed. The default port is 5080. + +- Credentials to log in to Local UI. Any Operating System (OS) user can be used to log into Local UI. ### Procedure diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/configure-proxy.md b/docs/docs-content/clusters/edge/local-ui/host-management/configure-proxy.md index b167b6cb9c..aced3c8994 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/configure-proxy.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/configure-proxy.md @@ -23,10 +23,6 @@ configured through Local UI will be retained even after a - An Edge host deployed with Edge Installer 4.3 or later. -- The Edge host does not have a connection to a Palette instance and the installation is conducted with the - `installationMode` parameter set to `airgap`. For more information, refer to - [Installer Configuration](../../edge-configuration/installer-reference.md). - - An active HTTP proxy server. ## Configure HTTP Proxy diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/diagnostic-tools.md b/docs/docs-content/clusters/edge/local-ui/host-management/diagnostic-tools.md index 3d77f5be20..583582b8b6 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/diagnostic-tools.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/diagnostic-tools.md @@ -21,7 +21,11 @@ an air-gapped environment. ### Prerequisites -- You have access to Local UI. +- An Edge host installed with Edge Installer 4.3 or later. + +- Network access to the Edge host's port where Local UI is exposed. The default port is 5080. + +- Credentials to log in to Local UI. Any Operating System (OS) user can be used to log into Local UI. ### Use Ping to Check Connection to a Specific Endpoint @@ -68,7 +72,11 @@ lost. ### Prerequisites -- You have access to Local UI. +- An Edge host installed with Edge Installer 4.3 or later. + +- Network access to the Edge host's port where Local UI is exposed. The default port is 5080. + +- Credentials to log in to Local UI. Any Operating System (OS) user can be used to log into Local UI. ### Use Traceroute to Check Connection to a Specific Endpoint diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/download-files.md b/docs/docs-content/clusters/edge/local-ui/host-management/download-files.md index 5fa7c8b379..91f84b0112 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/download-files.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/download-files.md @@ -20,9 +20,6 @@ to this directory; it is not limited to core dump files. - You have configured your applications to write files to `/var/log/files`. The steps to do this vary by application, but the path must be exactly `/var/log/files`. This is the only path where files can be downloaded from Local UI. -- An operational Edge host installed in the `airgap` mode. For more information, refer to - [Installer Reference](../../edge-configuration/installer-reference.md). - - Network access to your Edge host's Local UI port. The default port is `5080`. ## Enablement diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/host-management.md b/docs/docs-content/clusters/edge/local-ui/host-management/host-management.md index caee9bc821..1ff1493b4b 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/host-management.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/host-management.md @@ -11,6 +11,9 @@ Local UI allows you to manage your Edge host. You can configure Local UI to shut to a factory default. You can also update credentials, update Local UI's branding and configure HTTP proxy for your Edge host from Local UI. +Host management features, with exception of resetting the Edge host to factory setting, are available to both connected +and airgapped Edge hosts. + :::preview ::: diff --git a/docs/docs-content/clusters/edge/local-ui/host-management/reset-reboot.md b/docs/docs-content/clusters/edge/local-ui/host-management/reset-reboot.md index 9711abbfbd..0b92febb6d 100644 --- a/docs/docs-content/clusters/edge/local-ui/host-management/reset-reboot.md +++ b/docs/docs-content/clusters/edge/local-ui/host-management/reset-reboot.md @@ -45,10 +45,13 @@ Edge host is rebooting. ## Reset Edge Host to Factory Default -You can reset an Edge host to factory default from Local UI. This restores the Edge host to the state right after the -[initial configuration](../../site-deployment/site-installation/initial-setup.md) is completed in the Terminal User -Interface (TUI). Reset to factory default removes all workloads, content, and cluster definition from the Edge host. -This includes content bundles that were built into the ISO image during EdgeForge. +You can reset an airgapped Edge host to factory default from Local UI. This restores the Edge host to the state right +after the [initial configuration](../../site-deployment/site-installation/initial-setup.md) is completed in the Terminal +User Interface (TUI). Reset to factory default removes all workloads, content, and cluster definition from the Edge +host. This includes content bundles that were built into the ISO image during EdgeForge. + +If your Edge host has a connection to Palette, you cannot reset the Edge host to factory default through Local UI as the +cluster is managed through Palette. :::info diff --git a/docs/docs-content/clusters/edge/local-ui/local-ui.md b/docs/docs-content/clusters/edge/local-ui/local-ui.md index 2fa59f7eb0..9131eff675 100644 --- a/docs/docs-content/clusters/edge/local-ui/local-ui.md +++ b/docs/docs-content/clusters/edge/local-ui/local-ui.md @@ -8,9 +8,13 @@ tags: ["edge"] --- Once Palette Edge has been installed on the Edge host and the Edge host has gone through initial configuration, you will -be able to access Local UI. Local UI allows you to manage Edge hosts in your network locally, upload content bundles -containing images, Helm charts, and packs, and create Edge clusters locally in disconnected environments without -connections to a Palette instance. +be able to access Local UI. + +- In airgapped Edge hosts, Local UI allows you to manage Edge hosts in your network locally, upload content bundles + containing images, Helm charts, and packs, and create Edge clusters locally in disconnected environments without + connections to a Palette instance. +- In connected Edge hosts, you cannot use the cluster-related functionalities because the cluster is managed by Palette, + but you can still utilize Local UI to configure and manage the Edge host itself. :::preview @@ -18,25 +22,16 @@ connections to a Palette instance. ![A diagram illustrating how users and use EdgeForge and Local UI to deploy clusters without a Palette connection](/clusters_edge_emc_workflow.webp) -:::warning - -Local UI only works for Edge deployments in disconnected environments. A disconnected environment means that the Edge -host does not have a connection to a Palette instance. Do not use Local UI if your cluster has a connection to a Palette -instance. - -::: - -Refer to the follow resources to learn how to use Local UI to manage your disconnected Edge deployment: - ## Get Started - Refer to [Access Local UI](./host-management/access-console.md) for guidance on how to access Local UI and update your credentials. -- If you already included a content bundle and a cluster definition in your installer ISO, you can create a cluster - using the resources in the ISO directly. Refer to [Create Local Cluster](./cluster-management/create-cluster.md) for - guidance. Refer to [EdgeForge Workflow](../edgeforge-workflow/edgeforge-workflow.md) for guidance on how to include - content bundles and cluster definitions in your ISO. +- If you already included a content bundle and a cluster definition in your installer ISO, you can create a cluster in + your airgapped Edge host using the resources in the ISO directly. Refer to + [Create Local Cluster](./cluster-management/create-cluster.md) for guidance. Refer to + [EdgeForge Workflow](../edgeforge-workflow/edgeforge-workflow.md) for guidance on how to include content bundles and + cluster definitions in your ISO. - If you did not provide a content bundle or cluster definition, or if you want to provide new content from which to build clusters, refer to the following guides to upload content bundles and export cluster definitions. @@ -47,6 +42,8 @@ Refer to the follow resources to learn how to use Local UI to manage your discon ## Cluster Management +Cluster management features are only available to airgapped Edge hosts. + - [Upload Content Bundles](./cluster-management/upload-content-bundle.md) - [Export Cluster Definition](./cluster-management/export-cluster-definition.md) @@ -55,6 +52,9 @@ Refer to the follow resources to learn how to use Local UI to manage your discon ## Host Management +Most host management features, with the exception of Factory Reset, are available on both airgapped and connected Edge +hosts. + - [Access Local UI](./host-management/access-console.md) - [Configure HTTP Proxy in Local UI](./host-management/configure-proxy.md) @@ -62,3 +62,11 @@ Refer to the follow resources to learn how to use Local UI to manage your discon - [Reset Edge Host to Factory Default](./host-management/reset-reboot.md) - [Customize Local UI Theme](./host-management/theming.md) + +- [Add Custom Link to Sidebar](./host-management/custom-link.md) + +- [Troubleshooting with Diagnostic Tools](./host-management/diagnostic-tools.md) + +- [Configure Audit Logs](./host-management/audit-logs.md) + +- [Download Files](./host-management/download-files.md) diff --git a/docs/docs-content/clusters/edge/site-deployment/edge-host-view.md b/docs/docs-content/clusters/edge/site-deployment/edge-host-view.md index a34747158b..f869b0ab08 100644 --- a/docs/docs-content/clusters/edge/site-deployment/edge-host-view.md +++ b/docs/docs-content/clusters/edge/site-deployment/edge-host-view.md @@ -37,7 +37,7 @@ The following table lists all the attribute columns that are available in the Ed visible by default. Depending on your display settings, you might need to scroll horizontally to view all columns. When you pin a column, it will always be visible. -| Attribute | Description | Support Order By | +| Attribute | Description | Support Order-by | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | | Machine ID | The Unique Identifier (UID) of your Edge host. You can set this attribute with the `prefix` and the `name` parameter to set this attribute for your Edge host during installation. Refer to [Installer Reference](../edge-configuration/installer-reference.md) for more information. | Yes | | Status | The status of your Edge host. It has three possible values: **Ready** means the Edge host is ready to be assigned to a workload; **In-Use** means the Edge host is already part of an active cluster; **Unpaired** means the Edge host has not been paired with Palette. | Yes | @@ -73,6 +73,8 @@ certain columns, pin a column, filter Edge hosts by attribute, and order the Edg 4. The following table lists the actions you can take to customize the grid view. + ![A screenshot of the Edge host grid view complete with arrows pointing to the elements referred to by the preceding table](/clusters_edge_site-deployment_edge-grid-view.webp) + | Action | Description | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Reorder Columns | Click on the gear icon at the top right corner of the grid. In the list of scrollable columns, drag and drop the six dots icon to the left of each list item to reorder the columns. | @@ -81,8 +83,6 @@ certain columns, pin a column, filter Edge hosts by attribute, and order the Edg | Filter Edge Hosts by Attribute | At the top of the grid, click on **Tags**, **Status**, and **Architecture** depending on the attribute you want to filter by, and then choose the value you want to filter by. | | Order by a Column | Click on the label row of the column you want to order by alphanumeric order. You can click it again to change the sort order. You can only sort by one column at a time. | -![A screenshot of the Edge host grid view complete with arrows pointing to the elements referred to by the preceding table](/clusters_edge_site-deployment_edge-grid-view.webp) - ### Validate After customizing the grid view, the modified view will be reflected immediately. Confirm that the modified view is diff --git a/docs/docs-content/clusters/edge/site-deployment/site-installation/edge-host-registration.md b/docs/docs-content/clusters/edge/site-deployment/site-installation/edge-host-registration.md index e0627ade84..d2cbe65739 100644 --- a/docs/docs-content/clusters/edge/site-deployment/site-installation/edge-host-registration.md +++ b/docs/docs-content/clusters/edge/site-deployment/site-installation/edge-host-registration.md @@ -7,9 +7,13 @@ sidebar_position: 20 tags: ["edge"] --- -To use an Edge host with a host cluster, you must first register it with Palette. A registration token in the user data -is required to complete the registration process. Review the [Create Registration Token](create-registration-token.md) -guide for steps on how to create a tenant registration token. +To use an Edge host with a host cluster, you must first register it with Palette. With the exception of QR code +registration, a registration token in the user data is required to complete the registration process. Review the +[Create Registration Token](create-registration-token.md) guide for steps on how to create a tenant registration token. + +Edge hosts are registered under the default project chosen for the registration token. You can override the default +project by specifying the project in the Edge Installer [user data](../../edge-configuration/installer-reference.md) +configuration file. You have the following options to register the Edge host with Palette. @@ -21,22 +25,11 @@ Edge host IDs. ::: -| **Method** | **Description** | **Set up Effort** | -| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | -| Auto Registration | Edge hosts can automatically register with Palette through a _Registration Token_. This method requires you to specify the registration token in the user data. | Low | -| Manual Registration | You can manually enter a unique Edge host ID in Palette. | Low | -| QR Code | Scan a QR code that takes you to a web application that registers the Edge host with Palette. This method is considered advanced with the benefit of simplifying the Edge host registration without needing a tenant token or a manual entry. | High | - -## Registration Method - -To register the Edge host, you are required to use a registration token with all three registration options. Edge hosts -are registered under the default project chosen for the registration token. You can override the default project by -specifying the project in the Edge Installer [user data](../../edge-configuration/installer-reference.md) configuration -file. - -By default, devices automatically register during the on-site deployment process when a tenant registration token value -is present. Set the parameter `disableAutoRegister` to `true` in the Edge Installer configuration to disable auto -registration and require manual device registration. +| **Method** | **Description** | **Set up Effort** | +| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| [Auto Registration](#auto-registration) | Edge hosts can automatically register with Palette through a _Registration Token_. This method requires you to specify the registration token in the user data. | Low | +| [Manual Registration](#manual-registration) | You can manually enter a unique Edge host ID in Palette. | Low | +| [QR Code Registration](#qr-code-registration) | Scan a QR code that takes you to a web application that registers the Edge host with Palette. This method is considered advanced with the benefit of simplifying the Edge host registration without needing a tenant token or a manual entry. | High | ```yaml stylus: @@ -45,16 +38,11 @@ stylus: disableAutoRegister: true ``` -Select the registration method that best fits your organizational needs and review the steps to get started. - -- [Auto Registration](#auto-registration) - -- [Manual Registration](#manual-registration) - ### Auto Registration -When your Edge host powers up after installation, the Edge host will attempt to register itself with Palette -automatically. +Edge hosts that use the default `connected` installation mode automatically register during the on-site deployment +process when a tenant registration token value is present. Set the parameter `disableAutoRegister` to `true` in the Edge +Installer configuration to disable auto registration and require manual device registration. If you selected a default project for the registration token, that is the project the Edge host will be registered under. You can override the default project by providing a project name in the user data. @@ -172,7 +160,8 @@ Your Edge host is displayed and marked as **Registered** in the Edge hosts list. ### QR Code Registration You can provide a QR case-based automated registration to simplify the registration process. Upon boot up, a QR code is -displayed on the Edge host's console if enabled during the installation phase. +displayed on the Edge host's console if a registration URL was provided. If no registration URL was provided in the user +data, the QR code will not be displayed. Site operators scan the QR code to visit the registration page. This web page pre-populates the Edge host's unique ID in the web app and provides a list of edge sites they can associate with this edge host. diff --git a/docs/docs-content/clusters/edge/site-deployment/site-installation/initial-setup.md b/docs/docs-content/clusters/edge/site-deployment/site-installation/initial-setup.md index 3df360f856..fc97ec8499 100644 --- a/docs/docs-content/clusters/edge/site-deployment/site-installation/initial-setup.md +++ b/docs/docs-content/clusters/edge/site-deployment/site-installation/initial-setup.md @@ -61,7 +61,8 @@ perform the setup, you can issue the command `palette-tui` in the terminal to tr host. 3. If you have already configured a user in your **user-data** file in the EdgeForge step, this step will be skipped - automatically. For more information, refer to [Prepare User Data](../../edgeforge-workflow/prepare-user-data.md). + automatically and you will be asked to log in instead. For more information, refer to + [Prepare User Data](../../edgeforge-workflow/prepare-user-data.md). If you did not configure a user in your **user-data** file during EdgeForge or provide site user data, a terminal user interface will display a **Create User** page. This allows you to create an Operating System (OS) user with the @@ -81,17 +82,25 @@ perform the setup, you can issue the command `palette-tui` in the terminal to tr ![A terminal user interface showing displaying network configuration options](/cluster_edge_site-deployment_installation_initial-setup_tui.webp) Check the existing hostname and, optionally, change it to a new one. Use the Tab key or the up and down arrow keys to - switch between fields. When you make a change, press Enter to confirm the change. + switch between fields. When you make a change, press **Enter** to apply the change. -5. In **Network Adapters**, choose a network adapter that the Edge host will use to communicate with Palette. +5. In **Host Network Adapters**, select a network adapter you'd like to configure. By default, the network adapters + request an IP automatically from the Dynamic Host Configuration Protocol (DHCP) server. The CIDR block of an + adapter's possible IP address is displayed in the **Host Network Adapters** screen without selecting an individual + adapter. - By default, the network adapter requests an IP automatically from the DHCP server. Optionally, you can also specify a - static IP. Press Enter to confirm the change. + In the configuration page for each adapter, you can change the IP addressing scheme of the adapter and choose static + IP instead of DHCP. In Static IP mode, you will need to provide a static IP address, subnet mask, as well as the + address of the default gateway. Specifying a static IP will remove the existing DHCP settings. -6. In **DNS Configuration**, specify the IP address of the primary and secondary name servers. Press Enter to confirm - the change. +6. In the configuration page of each network adapter, you can also specify the Maximum Transmission Unit (MTU) for your + network adapter. The MTU defines the largest size, in bytes, of a packet that can be sent over a network interface + without needing to be fragmented. Press **Enter** to apply the change. -7. After you are satisfied with the configurations, navigate to **Quit** and hit enter to finish configuration. +7. In **DNS Configuration**, specify the IP address of the primary and secondary name servers. You can optionally also + specify a search domain. Press **Enter** to apply the change. + +8. After you are satisfied with the configurations, navigate to **Quit** and hit enter to finish configuration. ## Validate diff --git a/docs/docs-content/clusters/pcg/deploy-pcg/vmware.md b/docs/docs-content/clusters/pcg/deploy-pcg/vmware.md index eb169dc5d8..140447e237 100644 --- a/docs/docs-content/clusters/pcg/deploy-pcg/vmware.md +++ b/docs/docs-content/clusters/pcg/deploy-pcg/vmware.md @@ -273,10 +273,10 @@ The following requirements apply to tags: | **SSH Public Keys** | Provide the public OpenSSH key for the PCG cluster. Use this key when establishing an SSH connection with the PCG cluster. This prompt will result in the default text editor for the Operating System to open. Vi is the more common text editor used in Linux environments. | | **Number of Nodes** | The number of nodes that will make up the cluster. Available options are **1** or **3**. We recommend three nodes for a High Availability (HA) cluster in a production environment. | -8. Specify the IP pool configuration. You have the option to select a static placement or use Dynamic Domain Name - Service (DDNS). With static placement, an IP pool is created, and the PCG VMs are assigned IP addresses from the - selected pool. With DDNS, PCG VMs are assigned IP addresses via DNS. Review the following tables to learn more about - each parameter. +8. Specify the IP pool configuration. You have the option to select a static placement or use Dynamic Host + Configuration Protocol (DHCP). With static placement, an IP pool is created, and the PCG VMs are assigned IP + addresses from the selected pool. With DHCP, PCG VMs are assigned IP addresses via DNS. Review the following tables + to learn more about each parameter. :::warning @@ -297,7 +297,7 @@ The following requirements apply to tags: | **Name servers** | Comma-separated list of DNS name server IP addresses. | | **Name server search suffixes (optional)** | Comma-separated list of DNS search domains. | - ##### DDNS Placement Configuration + ##### DHCP Placement Configuration | **Parameter** | **Description** | | ------------------ | ------------------------------------------- | diff --git a/docs/docs-content/component.md b/docs/docs-content/component.md index b1e813f237..69f40007a7 100644 --- a/docs/docs-content/component.md +++ b/docs/docs-content/component.md @@ -16,6 +16,7 @@ This page lists the version details of various Palette components and their resp | Palette Release | Recommended CLI Version | | --------------- | ----------------------- | +| Release 4.4.18 | v4.4.8 | | Release 4.4.14 | v4.4.6 | | Release 4.4.12 | v4.4.6 | | Release 4.4.11 | v4.4.5 | @@ -31,6 +32,7 @@ This page lists the version details of various Palette components and their resp | Palette Release | CLI Version | | --------------- | ----------- | +| Release 4.4.18 | v4.4.12 | | Release 4.4.14 | v4.4.8 | | Release 4.4.12 | v4.4.6 | | Release 4.4.11 | v4.4.4 | diff --git a/docs/docs-content/enterprise-version/install-palette/airgap/supplemental-packs.md b/docs/docs-content/enterprise-version/install-palette/airgap/supplemental-packs.md index c5c75d6130..3733dab633 100644 --- a/docs/docs-content/enterprise-version/install-palette/airgap/supplemental-packs.md +++ b/docs/docs-content/enterprise-version/install-palette/airgap/supplemental-packs.md @@ -13,94 +13,66 @@ Review the following table to determine which pack binaries you need to download | **File Name** | **Download URL** | | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| `airgap-pack-argo-cd-5.46.8.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-argo-cd-5.46.8.bin | -| `airgap-pack-cni-calico-3.25.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-3.25.1.bin | -| `airgap-pack-cni-calico-3.26.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-3.26.0.bin | -| `airgap-pack-cni-calico-3.27.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-3.27.0.bin | -| `airgap-pack-cni-calico-azure-3.27.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-azure-3.27.0.bin | -| `airgap-pack-cni-cilium-oss-1.13.3.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-cilium-oss-1.13.3.bin | -| `airgap-pack-cni-cilium-oss-1.14.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-cilium-oss-1.14.1.bin | -| `airgap-pack-cni-cilium-oss-1.14.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-cilium-oss-1.14.7.bin | -| `airgap-pack-cni-cilium-oss-1.15.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-cilium-oss-1.15.1.bin | -| `airgap-pack-csi-aws-ebs-1.20.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-aws-ebs-1.20.0.bin | -| `airgap-pack-csi-aws-ebs-1.26.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-aws-ebs-1.26.1.bin | -| `airgap-pack-csi-local-path-provisioner-0.0.25.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-local-path-provisioner-0.0.25.bin | -| `airgap-pack-csi-longhorn-1.4.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-longhorn-1.4.1.bin | -| `airgap-pack-csi-longhorn-1.5.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-longhorn-1.5.1.bin | -| `airgap-pack-csi-longhorn-1.6.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-longhorn-1.6.0.bin | -| `airgap-pack-csi-longhorn-addon-1.4.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-longhorn-addon-1.4.1.bin | -| `airgap-pack-csi-longhorn-addon-1.5.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-longhorn-addon-1.5.1.bin | -| `airgap-pack-csi-longhorn-addon-1.6.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-longhorn-addon-1.6.0.bin | -| `airgap-pack-csi-rook-ceph-1.10.10.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-rook-ceph-1.10.10.bin | -| `airgap-pack-csi-rook-ceph-1.13.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-rook-ceph-1.13.1.bin | -| `airgap-pack-csi-rook-ceph-addon-1.10.10.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-rook-ceph-addon-1.10.10.bin | -| `airgap-pack-csi-rook-ceph-addon-1.13.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-rook-ceph-addon-1.13.1.bin | -| `airgap-pack-csi-rook-ceph-helm-1.11.9.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-rook-ceph-helm-1.11.9.bin | -| `airgap-pack-csi-rook-ceph-helm-addon-1.11.9.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-rook-ceph-helm-addon-1.11.9.bin | -| `airgap-pack-csi-vsphere-csi-3.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.0.0.bin | -| `airgap-pack-csi-vsphere-csi-3.0.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.0.2.bin | -| `airgap-pack-csi-vsphere-csi-3.1.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.1.0.bin | -| `airgap-pack-csi-vsphere-csi-3.1.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.1.2.bin | -| `airgap-pack-custom_os-1.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-custom_os-1.0.0.bin | -| `airgap-pack-edge-k3s-1.26.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.26.12.bin | -| `airgap-pack-edge-k3s-1.26.14.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.26.14.bin | -| `airgap-pack-edge-k3s-1.26.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.26.4.bin | -| `airgap-pack-edge-k3s-1.27.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.27.11.bin | -| `airgap-pack-edge-k3s-1.27.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.27.2.bin | -| `airgap-pack-edge-k3s-1.28.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.28.7.bin | -| `airgap-pack-edge-k3s-1.29.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.29.0.bin | -| `airgap-pack-edge-k3s-1.29.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.29.2.bin | -| `airgap-pack-edge-k8s-1.26.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.26.12.bin | -| `airgap-pack-edge-k8s-1.26.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.26.4.bin | -| `airgap-pack-edge-k8s-1.27.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.27.2.bin | -| `airgap-pack-edge-k8s-1.27.9.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.27.9.bin | -| `airgap-pack-edge-k8s-1.28.5.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.28.5.bin | -| `airgap-pack-edge-k8s-1.29.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.29.0.bin | -| `airgap-pack-edge-native-byoi-1.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-native-byoi-1.0.0.bin | -| `airgap-pack-edge-rke2-1.25.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.25.2.bin | -| `airgap-pack-edge-rke2-1.26.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.26.12.bin | -| `airgap-pack-edge-rke2-1.26.14.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.26.14.bin | -| `airgap-pack-edge-rke2-1.26.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.26.4.bin | -| `airgap-pack-edge-rke2-1.27.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.27.11.bin | -| `airgap-pack-edge-rke2-1.27.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.27.2.bin | -| `airgap-pack-edge-rke2-1.27.9.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.27.9.bin | -| `airgap-pack-edge-rke2-1.28.5.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.28.5.bin | -| `airgap-pack-edge-rke2-1.28.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.28.7.bin | -| `airgap-pack-edge-rke2-1.29.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.29.0.bin | -| `airgap-pack-edge-rke2-1.29.3.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.29.3.bin | -| `airgap-pack-generic-byoi-1.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-generic-byoi-1.0.0.bin | -| `airgap-pack-kubernetes-1.26.10.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.26.10.bin | -| `airgap-pack-kubernetes-1.26.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.26.12.bin | -| `airgap-pack-kubernetes-1.26.15.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.26.15.bin | -| `airgap-pack-kubernetes-1.26.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.26.4.bin | -| `airgap-pack-kubernetes-1.27.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.27.11.bin | -| `airgap-pack-kubernetes-1.27.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.27.1.bin | -| `airgap-pack-kubernetes-1.27.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.27.7.bin | -| `airgap-pack-kubernetes-1.27.9.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.27.9.bin | -| `airgap-pack-kubernetes-1.28.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.28.2.bin | -| `airgap-pack-kubernetes-1.28.5.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.28.5.bin | -| `airgap-pack-kubernetes-1.29.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.29.0.bin | -| `airgap-pack-kubernetes-custom-1.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-custom-1.0.0.bin | -| `airgap-pack-kubernetes-rke2-1.26.11-rke2r1-build20231115.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.26.11-rke2r1-build20231115.bin | -| `airgap-pack-kubernetes-rke2-1.26.12-rke2r1-build20231220.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.26.12-rke2r1-build20231220.bin | -| `airgap-pack-kubernetes-rke2-1.27.8-rke2r1-build20231115.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.27.8-rke2r1-build20231115.bin | -| `airgap-pack-kubernetes-rke2-1.27.9-rke2r1-build20231220.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.27.9-rke2r1-build20231220.bin | -| `airgap-pack-kubernetes-rke2-1.28.4-rke2r1-build20231115.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.28.4-rke2r1-build20231115.bin | -| `airgap-pack-kubernetes-rke2-1.28.5-rke2r1-build20231220.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.28.5-rke2r1-build20231220.bin | -| `airgap-pack-lb-metallb-helm-0.13.10.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-lb-metallb-helm-0.13.10.bin | -| `airgap-pack-lb-metallb-helm-0.13.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-lb-metallb-helm-0.13.12.bin | -| `airgap-pack-nutanix-csi-2.6.6.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-nutanix-csi-2.6.6.bin | -| `airgap-pack-prometheus-operator-46.4.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-prometheus-operator-46.4.0.bin | -| `airgap-pack-prometheus-operator-55.8.3.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-prometheus-operator-55.8.3.bin | -| `airgap-pack-spectro-grafana-dashboards-4.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-spectro-grafana-dashboards-4.0.0.bin | -| `airgap-pack-spectro-k8s-dashboard-2.7.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-spectro-k8s-dashboard-2.7.1.bin | -| `airgap-pack-spectro-proxy-1.4.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-spectro-proxy-1.4.1.bin | -| `airgap-pack-spectro-proxy-1.4.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-spectro-proxy-1.4.2.bin | -| `airgap-pack-spectro-proxy-1.5.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-spectro-proxy-1.5.1.bin | -| `airgap-pack-spectro-proxy-1.5.2.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-spectro-proxy-1.5.2.bin | -| `airgap-pack-thirdparty-4.3.5.bin` | https://software-private.spectrocloud.com/airgap/thirdparty/airgap-thirdparty-4.3.5.bin | -| `airgap-pack-ubuntu-vsphere-22.04.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-ubuntu-vsphere-22.04.bin | -| `airgap-pack-vault-0.27.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-vault-0.27.0.bin | +| `airgap-pack-cni-calico-3.28.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-3.28.0.bin | +| `airgap-pack-cni-calico-3.28.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-3.28.1.bin | +| `airgap-pack-cni-calico-azure-3.28.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-azure-3.28.0.bin | +| `airgap-pack-cni-calico-azure-3.28.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-calico-azure-3.28.1.bin | +| `airgap-pack-cni-cilium-oss-1.15.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-cilium-oss-1.15.7.bin | +| `airgap-pack-cni-cilium-oss-1.16.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-cilium-oss-1.16.0.bin | +| `airgap-pack-cni-flannel-0.25.5.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-flannel-0.25.5.bin | +| `airgap-pack-csi-vsphere-csi-3.2.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.2.0.bin | +| `airgap-pack-csi-vsphere-csi-3.3.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.3.0.bin | +| `airgap-pack-csi-vsphere-csi-3.3.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-csi-vsphere-csi-3.3.1.bin | +| `airgap-pack-edge-k3s-1.27.15.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.27.15.bin | +| `airgap-pack-edge-k3s-1.28.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.28.11.bin | +| `airgap-pack-edge-k3s-1.29.6.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.29.6.bin | +| `airgap-pack-edge-k3s-1.28.13.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.28.13.bin | +| `airgap-pack-edge-k3s-1.29.8.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.29.8.bin | +| `airgap-pack-edge-k3s-1.30.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k3s-1.30.4.bin | +| `airgap-pack-edge-k8s-1.28.9.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.28.9.bin | +| `airgap-pack-edge-k8s-1.27.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.27.11.bin | +| `airgap-pack-edge-k8s-1.27.15.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.27.15.bin | +| `airgap-pack-edge-k8s-1.28.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.28.11.bin | +| `airgap-pack-edge-k8s-1.29.6.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.29.6.bin | +| `airgap-pack-edge-k8s-1.29.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.29.7.bin | +| `airgap-pack-edge-k8s-1.28.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.28.12.bin | +| `airgap-pack-edge-k8s-1.27.16.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.27.16.bin | +| `airgap-pack-edge-k8s-1.28.13.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.28.13.bin | +| `airgap-pack-edge-k8s-1.29.8.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.29.8.bin | +| `airgap-pack-edge-k8s-1.30.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-k8s-1.30.4.bin | +| `airgap-pack-edge-rke2-1.27.13.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.27.13.bin | +| `airgap-pack-edge-rke2-1.28.10.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.28.10.bin | +| `airgap-pack-edge-rke2-1.29.5.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.29.5.bin | +| `airgap-pack-edge-rke2-1.27.14.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.27.14.bin | +| `airgap-pack-edge-rke2-1.29.6.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.29.6.bin | +| `airgap-pack-edge-rke2-1.28.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.28.11.bin | +| `airgap-pack-edge-rke2-1.27.15.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.27.15.bin | +| `airgap-pack-edge-rke2-1.28.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.28.12.bin | +| `airgap-pack-edge-rke2-1.29.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.29.7.bin | +| `airgap-pack-edge-rke2-1.30.3.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-edge-rke2-1.30.3.bin | +| `airgap-pack-kubernetes-1.28.11.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.28.11.bin | +| `airgap-pack-kubernetes-1.27.15.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.27.15.bin | +| `airgap-pack-kubernetes-1.29.6.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.29.6.bin | +| `airgap-pack-kubernetes-1.29.7.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.29.7.bin | +| `airgap-pack-kubernetes-1.28.12.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.28.12.bin | +| `airgap-pack-kubernetes-1.27.16.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.27.16.bin | +| `airgap-pack-kubernetes-1.28.13.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.28.13.bin | +| `airgap-pack-kubernetes-1.29.8.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.29.8.bin | +| `airgap-pack-kubernetes-1.30.4.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-1.30.4.bin | +| `airgap-pack-kubernetes-rke2-1.27.14-rke2r1-build20240515.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.27.14-rke2r1-build20240515.bin | +| `airgap-pack-kubernetes-rke2-1.28.10-rke2r1-build20240514.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.28.10-rke2r1-build20240514.bin | +| `airgap-pack-kubernetes-rke2-1.29.5-rke2r1-build20240515.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.29.5-rke2r1-build20240515.bin | +| `airgap-pack-kubernetes-rke2-1.29.6-rke2r1-build20240619.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.29.6-rke2r1-build20240619.bin | +| `airgap-pack-kubernetes-rke2-1.28.11-rke2r1-build20240619.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.28.11-rke2r1-build20240619.bin | +| `airgap-pack-kubernetes-rke2-1.27.15-rke2r1-build20240619.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.27.15-rke2r1-build20240619.bin | +| `airgap-pack-kubernetes-rke2-1.28.12-rke2r1-build20240717.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.28.12-rke2r1-build20240717.bin | +| `airgap-pack-kubernetes-rke2-1.29.7-rke2r1-build20240717.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.29.7-rke2r1-build20240717.bin | +| `airgap-pack-kubernetes-rke2-1.30.3-rke2r1-build20240717.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-rke2-1.30.3-rke2r1-build20240717.bin | +| `airgap-pack-lb-metallb-helm-0.14.5.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-lb-metallb-helm-0.14.5.bin | +| `airgap-pack-prometheus-operator-58.6.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-prometheus-operator-58.6.0.bin | +| `airgap-pack-reloader-1.0.74.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-reloader-1.0.74.bin | +| `airgap-pack-reloader-1.0.107.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-reloader-1.0.107.bin | +| `airgap-pack-volume-snapshot-controller-8.0.1.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-volume-snapshot-controller-8.0.1.bin | ## Download Instructions @@ -170,22 +142,27 @@ registry. The following table lists additional OVAs you may need depending on the Kubernetes version and distribution you want to use for the workload clusters. -| **Kubernetes Version** | **OVA Name** | **Download URL** | -| ---------------------- | ----------------------- | ------------------------------------------------------------------------------------------ | -| Kubernetes 1.26.4 | u-2204-0-k-1264-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-1264-0.ova` | -| Kubernetes 1.26.5 | u-2204-0-k-1265-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-1265-0.ova` | -| Kubernetes 1.26.10 | u-2204-0-k-12610-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-12610-0.ova` | -| Kubernetes 1.26.12 | u-2204-0-k-12612-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-12612-0.ova` | -| Kubernetes 1.27.1 | u-2204-0-k-1271-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-1271-0.ova` | -| Kubernetes 1.27.2 | u-2204-0-k-1272-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-1272-0.ova` | -| Kubernetes 1.28.2 | u-2204-0-k-1282-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-1282-0.ova` | -| Kubernetes 1.29.0 | u-2204-0-k-1290-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-1290-0.ova` | -| RKE2 1.26.11 | u-2204-0-k-rke2-12611-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-rke2-12611-0.ova` | -| RKE2 1.26.12 | u-2204-0-k-rke2-12612-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-rke2-12612-0.ova` | -| RKE2 1.27.8 | u-2204-0-k-rke2-1278-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-rke2-1278-0.ova` | -| RKE2 1.27.9 | u-2204-0-k-rke2-1279-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-rke2-1279-0.ova` | -| RKE2 1.28.4 | u-2204-0-k-rke2-1284-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-rke2-1284-0.ova` | -| RKE2 1.28.5 | u-2204-0-k-rke2-1285-0 | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2204-0-k-rke2-1285-0.ova` | +| **Kubernetes Version** | **OVA Name** | **Download URL** | +| ---------------------- | --------------------------- | -------------------------------------------------------------------------------- | +| Kubernetes 1.29.4 | u-2204-0-k-1294-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1294-0.ova` | +| Kubernetes 1.28.9 | u-2204-0-k-1289-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1289-0.ova` | +| Kubernetes 1.27.13 | u-2204-0-k-12713-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-12713-0.ova` | +| Kubernetes 1.27.11 | u-2204-0-k-rke2-12711-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-12711-0.ova` | +| Kubernetes 1.29.4 | u-2204-0-k-rke2-1294-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-1294-0.ova` | +| Kubernetes 1.28.9 | u-2204-0-k-rke2-1289-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-1289-0.ova` | +| Kubernetes 1.27.13 | u-2204-0-k-rke2-12713-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-12713-0.ova` | +| Kubernetes 1.29.5 | u-2204-0-k-rke2-1295-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-1295-0.ova` | +| Kubernetes 1.27.14 | u-2204-0-k-rke2-12714-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-12714-0.ova` | +| Kubernetes 1.28.10 | u-2204-0-k-rke2-12810-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-12810-0.ova` | +| Kubernetes 1.28.11 | u-2204-0-k-12811-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-12811-0.ova` | +| Kubernetes 1.29.6 | u-2204-0-k-1296-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1296-0.ova` | +| Kubernetes 1.27.15 | u-2204-0-k-12715-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-12715-0.ova` | +| Kubernetes 1.27.16 | u-2204-0-k-12716-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-12716-0.ova` | +| Kubernetes 1.28.12 | u-2204-0-k-12812-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-12812-0.ova` | +| Kubernetes 1.29.7 | u-2204-0-k-1297-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-1297-0.ova` | +| Kubernetes 1.29.6 | u-2204-0-k-rke2-1296-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-1296-0.ova` | +| Kubernetes 1.28.11 | u-2204-0-k-rke2-12811-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-12811-0.ova` | +| Kubernetes 1.27.15 | u-2204-0-k-rke2-12715-0.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2204-0-k-rke2-12715-0.ova` | ### Usage Instructions diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md index 3674ae2e7c..317e69a902 100644 --- a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md +++ b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/airgap-install/install.md @@ -233,9 +233,9 @@ Use the following steps to install Palette. | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers. | | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. | -15. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing - static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DDNS assigns IP addresses - using DNS. +15. Specify the IP pool configuration. The placement type can be Static or Dynamic Host Configuration Protocol (DHCP). + Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DHCP assigns IP + addresses using DNS. #### Static Placement Configuration diff --git a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md index 1316384fad..07f6940773 100644 --- a/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md +++ b/docs/docs-content/enterprise-version/install-palette/install-on-vmware/install.md @@ -210,9 +210,9 @@ Use the following steps to install Palette. | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers. | | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. | -15. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing - static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DDNS assigns IP addresses - using DNS. +15. Specify the IP pool configuration. The placement type can be Static or Dynamic Host Configuration Protocol (DHCP). + Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DHCP assigns IP + addresses using DNS. #### Static Placement Configuration diff --git a/docs/docs-content/enterprise-version/upgrade/upgrade.md b/docs/docs-content/enterprise-version/upgrade/upgrade.md index 427f5819f5..2e7a9b60ca 100644 --- a/docs/docs-content/enterprise-version/upgrade/upgrade.md +++ b/docs/docs-content/enterprise-version/upgrade/upgrade.md @@ -33,6 +33,7 @@ minor version available. | **Source Version** | **Target Version** | **Support** | | :----------------: | :----------------: | :----------------: | +| 4.4.14 | 4.4.18 | :white_check_mark: | | 4.4.11 | 4.4.14 | :white_check_mark: | | 4.4.6 | 4.4.14 | :white_check_mark: | | 4.3.6 | 4.4.14 | :white_check_mark: | diff --git a/docs/docs-content/legal-licenses/oss-licenses.md b/docs/docs-content/legal-licenses/oss-licenses.md index 3419b6f761..3b0f9ff70e 100644 --- a/docs/docs-content/legal-licenses/oss-licenses.md +++ b/docs/docs-content/legal-licenses/oss-licenses.md @@ -11,744 +11,872 @@ tags: ["legal", "licenses"] The following table lists the open-source licenses tied to the libraries and modules currently in use by Palette. If you have any questions or concerns, contact us at support@spectrocloud.com. -| **Library** | **License** | -| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -| cloud.google.com/go/compute/metadata | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| cloud.google.com/go/container | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| cloud.google.com/go/container/apiv1/containerpb | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| dario.cat/mergo | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| emperror.dev/errors | [MIT](https://opensource.org/license/mit/) | -| github.com/andreburgaud/crypt2go | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/andybalholm/brotli | [MIT](https://opensource.org/license/mit/) | -| github.com/antlr/antlr4/runtime/Go/antlr | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/apparentlymart/go-cidr/cidr | [MIT](https://opensource.org/license/mit/) | -| github.com/asaskevich/govalidator | [MIT](https://opensource.org/license/mit/) | -| github.com/avast/retry-go | [MIT](https://opensource.org/license/mit/) | -| github.com/avast/retry-go/v4 | [MIT](https://opensource.org/license/mit/) | -| github.com/aws/amazon-vpc-cni-k8s/pkg/apis/crd/v1alpha1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/aws/aws-sdk-go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/aws/aws-sdk-go/internal/sync/singleflight | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/awslabs/goformation/v4 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/azure-pipeline-go/pipeline | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/azcore | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/azidentity | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/internal | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/azure-storage-blob-go/azblob | [MIT](https://opensource.org/license/mit/) | -| github.com/Azure/go-autorest/autorest | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/autorest/adal | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/autorest/azure/auth | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/autorest/azure/cli | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/autorest/date | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/autorest/to | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/autorest/validation | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/logger | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Azure/go-autorest/tracing | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/AzureAD/microsoft-authentication-library-for-go/apps | [MIT](https://opensource.org/license/mit/) | -| github.com/beevik/etree | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/beorn7/perks/quantile | [MIT](https://opensource.org/license/mit/) | -| github.com/bketelsen/logr | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/blang/semver | [MIT](https://opensource.org/license/mit/) | -| github.com/blang/semver/v4 | [MIT](https://opensource.org/license/mit/) | -| github.com/bshuster-repo/logrus-logstash-hook | [MIT](https://opensource.org/license/mit/) | -| github.com/BurntSushi/toml | [MIT](https://opensource.org/license/mit/) | -| github.com/bxcodec/faker/v3 | [MIT](https://opensource.org/license/mit/) | -| github.com/canonical/cluster-api-bootstrap-provider-microk8s/apis/v1beta1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/canonical/cluster-api-control-plane-provider-microk8s/api/v1beta1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/cert-manager/cert-manager/pkg/apis | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/cespare/xxhash/v2 | [MIT](https://opensource.org/license/mit/) | -| github.com/chai2010/gettext-go | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/cloudflare/circl | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/containerd/containerd | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/containerd/log | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/coredns/caddy/caddyfile | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/coredns/corefile-migration/migration | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/coreos/go-oidc | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/coreos/go-oidc/v3/oidc | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/coreos/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/corvus-ch/logr | [MIT](https://opensource.org/license/mit/) | -| github.com/cyphar/filepath-securejoin | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/davecgh/go-spew/spew | [ISC](https://opensource.org/license/isc-license-txt) | -| github.com/devfile/api/v2/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/devfile/library/v2/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/devfile/registry-support/index/generator/schema | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/devfile/registry-support/registry-library/library | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/dgraph-io/ristretto | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/dgraph-io/ristretto/z | [MIT](https://opensource.org/license/mit/) | -| github.com/dimchansky/utfbom | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/distribution/distribution/v3/reference | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/distribution/reference | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/cli/cli/config | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/distribution | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/distribution/uuid | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/docker | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/docker-credential-helpers | [MIT](https://opensource.org/license/mit/) | -| github.com/docker/go-connections/tlsconfig | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/go-metrics | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/go-units | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/docker/libtrust | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/drone/envsubst/v2 | [MIT](https://opensource.org/license/mit/) | -| github.com/dsnet/compress | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/dustin/go-humanize | [MIT](https://opensource.org/license/mit/) | -| github.com/emicklei/go-restful/v3 | [MIT](https://opensource.org/license/mit/) | -| github.com/emirpasic/gods | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/evanphx/json-patch | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/evanphx/json-patch/v5 | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/exponent-io/jsonpath | [MIT](https://opensource.org/license/mit/) | -| github.com/fatih/color | [MIT](https://opensource.org/license/mit/) | -| github.com/felixge/httpsnoop | [MIT](https://opensource.org/license/mit/) | -| github.com/flynn/go-shlex | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/fsnotify/fsnotify | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/fxamacker/cbor/v2 | [MIT](https://opensource.org/license/mit/) | -| github.com/ghodss/yaml | [MIT](https://opensource.org/license/mit/) | -| github.com/go-errors/errors | [MIT](https://opensource.org/license/mit/) | -| github.com/go-git/gcfg | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/go-git/go-billy/v5 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-git/go-git/v5 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-gorp/gorp/v3 | [MIT](https://opensource.org/license/mit/) | -| github.com/go-logr/logr | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-logr/stdr | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-mail/mail | [MIT](https://opensource.org/license/mit/) | -| github.com/go-openapi/analysis | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/errors | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/jsonpointer | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/jsonreference | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/loads | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/runtime | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/runtime/middleware/denco | [MIT](https://opensource.org/license/mit/) | -| github.com/go-openapi/spec | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/strfmt | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/swag | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-openapi/validate | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/go-stack/stack | [MIT](https://opensource.org/license/mit/) | -| github.com/go-webauthn/webauthn | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/go-webauthn/x/revoke | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/gobuffalo/flect | [MIT](https://opensource.org/license/mit/) | -| github.com/gobwas/glob | [MIT](https://opensource.org/license/mit/) | -| github.com/gofrs/uuid | [MIT](https://opensource.org/license/mit/) | -| github.com/gogo/protobuf | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/goharbor/go-client/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/golang-jwt/jwt/v4 | [MIT](https://opensource.org/license/mit/) | -| github.com/golang-jwt/jwt/v5 | [MIT](https://opensource.org/license/mit/) | -| github.com/golang/glog | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/golang/groupcache/lru | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/golang/mock/gomock | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/golang/protobuf | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/golang/snappy | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/google/btree | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/cel-go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/gnostic | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/gnostic-models | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/go-cmp/cmp | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/google/go-github/github | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/google/go-github/v45/github | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/google/go-querystring/query | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/google/go-tpm | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/gofuzz | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/martian/log | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/s2a-go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/shlex | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/google/uuid | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/googleapis/enterprise-certificate-proxy/client | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/googleapis/gax-go/v2 | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/googleapis/gnostic | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/gophercloud/gophercloud | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/gophercloud/utils | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/gorhill/cronexpr | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/gorilla/handlers | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/gorilla/mux | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/gorilla/websocket | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/gosuri/uitable | [MIT](https://opensource.org/license/mit/) | -| github.com/gosuri/uitable/util/wordwrap | [MIT](https://opensource.org/license/mit/) | -| github.com/graph-gophers/graphql-go | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/gregjones/httpcache | [MIT](https://opensource.org/license/mit/) | -| github.com/hashicorp/errwrap | [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) | -| github.com/hashicorp/go-multierror | [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) | -| github.com/hashicorp/go-uuid | [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) | -| github.com/hashicorp/go-version | [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) | -| github.com/hashicorp/golang-lru | [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) | -| github.com/hashicorp/hcl | [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) | -| github.com/huandu/xstrings | [MIT](https://opensource.org/license/mit/) | -| github.com/imdario/mergo | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/jasonlvhit/gocron | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/jbenet/go-context/io | [MIT](https://opensource.org/license/mit/) | -| github.com/jessevdk/go-flags | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/jlaffaye/ftp | [ISC](https://opensource.org/license/isc-license-txt) | -| github.com/jmespath/go-jmespath | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/jmoiron/sqlx | [MIT](https://opensource.org/license/mit/) | -| github.com/jonboulle/clockwork | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/josharian/intern | [MIT](https://opensource.org/license/mit/) | -| github.com/jpillora/backoff | [MIT](https://opensource.org/license/mit/) | -| github.com/json-iterator/go | [MIT](https://opensource.org/license/mit/) | -| github.com/juliangruber/go-intersect | [MIT](https://opensource.org/license/mit/) | -| github.com/kelseyhightower/envconfig | [MIT](https://opensource.org/license/mit/) | -| github.com/kevinburke/ssh_config | [MIT](https://opensource.org/license/mit/) | -| github.com/klauspost/compress | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/klauspost/compress | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/klauspost/compress/internal/snapref | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/klauspost/compress/zstd/internal/xxhash | [MIT](https://opensource.org/license/mit/) | -| github.com/klauspost/pgzip | [MIT](https://opensource.org/license/mit/) | -| github.com/kr/pretty | [MIT](https://opensource.org/license/mit/) | -| github.com/kr/text | [MIT](https://opensource.org/license/mit/) | -| github.com/kylelemons/godebug | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/kyverno/go-wildcard | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/lann/builder | [MIT](https://opensource.org/license/mit/) | -| github.com/lann/ps | [MIT](https://opensource.org/license/mit/) | -| github.com/lib/pq | [MIT](https://opensource.org/license/mit/) | -| github.com/liggitt/tabwriter | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/loft-sh/cluster-api-provider-vcluster/api/v1alpha1 | [MIT](https://opensource.org/license/mit/) | -| github.com/loft-sh/vcluster/pkg/constants | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/magiconair/properties | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/magisterquis/connectproxy | [Zlib](https://www.zlib.net/zlib_license.html) | -| github.com/mailru/easyjson | [MIT](https://opensource.org/license/mit/) | -| github.com/MakeNowJust/heredoc | [MIT](https://opensource.org/license/mit/) | -| github.com/Masterminds/goutils | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/Masterminds/semver | [MIT](https://opensource.org/license/mit/) | -| github.com/Masterminds/semver/v3 | [MIT](https://opensource.org/license/mit/) | -| github.com/Masterminds/sprig/v3 | [MIT](https://opensource.org/license/mit/) | -| github.com/Masterminds/squirrel | [MIT](https://opensource.org/license/mit/) | -| github.com/mattermost/xml-roundtrip-validator | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/mattn/go-colorable | [MIT](https://opensource.org/license/mit/) | -| github.com/mattn/go-ieproxy | [MIT](https://opensource.org/license/mit/) | -| github.com/mattn/go-isatty | [MIT](https://opensource.org/license/mit/) | -| github.com/mattn/go-runewidth | [MIT](https://opensource.org/license/mit/) | -| github.com/matttproud/golang_protobuf_extensions/pbutil | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/matttproud/golang_protobuf_extensions/v2/pbutil | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/metal3-io/ip-address-manager/api/v1alpha1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/mholt/archiver/v3 | [MIT](https://opensource.org/license/mit/) | -| github.com/mitchellh/copystructure | [MIT](https://opensource.org/license/mit/) | -| github.com/mitchellh/go-homedir | [MIT](https://opensource.org/license/mit/) | -| github.com/mitchellh/go-wordwrap | [MIT](https://opensource.org/license/mit/) | -| github.com/mitchellh/hashstructure | [MIT](https://opensource.org/license/mit/) | -| github.com/mitchellh/mapstructure | [MIT](https://opensource.org/license/mit/) | -| github.com/mitchellh/reflectwalk | [MIT](https://opensource.org/license/mit/) | -| github.com/moby/locker | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/moby/spdystream | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/moby/term | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/modern-go/concurrent | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/modern-go/reflect2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/mongodb/mongo-tools | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/mongodb/mongo-tools-common | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/monochromegane/go-gitignore | [MIT](https://opensource.org/license/mit/) | -| github.com/montanaflynn/stats | [MIT](https://opensource.org/license/mit/) | -| github.com/munnerz/goautoneg | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/mxk/go-flowrate/flowrate | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/Narasimha1997/ratelimiter | [MIT](https://opensource.org/license/mit/) | -| github.com/nats-io/jwt/v2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/nats-io/nats.go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/nats-io/nkeys | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/nats-io/nuid | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/nicksnyder/go-i18n/v2 | [MIT](https://opensource.org/license/mit/) | -| github.com/nwaples/rardecode | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/oklog/ulid | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/onsi/gomega | [MIT](https://opensource.org/license/mit/) | -| github.com/opencontainers/go-digest | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/opencontainers/image-spec/specs-go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/openshift/api | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/openshift/api/config/v1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/openshift/console | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/openshift/custom-resource-status/conditions/v1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/openshift/library-go/pkg/crypto | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/opentracing/opentracing-go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/operator-framework/api/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/operator-framework/kubectl-operator/pkg/action | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/operator-framework/operator-registry/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/PaesslerAG/gval | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/PaesslerAG/jsonpath | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/pborman/uuid | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/pelletier/go-toml/v2 | [MIT](https://opensource.org/license/mit/) | -| github.com/peterbourgon/diskv | [MIT](https://opensource.org/license/mit/) | -| github.com/phpdave11/gofpdi | [MIT](https://opensource.org/license/mit/) | -| github.com/pierrec/lz4/v4 | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/pjbgf/sha1cd | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/pkg/browser | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/pkg/errors | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/pmezard/go-difflib/difflib | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/pquerna/cachecontrol | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/prometheus/client_golang/prometheus | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/prometheus/client_model/go | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/prometheus/common | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/prometheus/procfs | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/ProtonMail/go-crypto | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/PuerkitoBio/purell | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/PuerkitoBio/urlesc | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/rancher/system-upgrade-controller/pkg/apis | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/rancher/wrangler/pkg/genericcondition | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/rawagner/graphql-transport-ws/graphqlws | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/rawagner/graphql-transport-ws/graphqlws/internal/connection | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/rubenv/sql-migrate | [MIT](https://opensource.org/license/mit/) | -| github.com/rubenv/sql-migrate/sqlparse | [MIT](https://opensource.org/license/mit/) | -| github.com/russellhaering/gosaml2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/russellhaering/goxmldsig | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/russross/blackfriday/v2 | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| github.com/sanathkr/go-yaml | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/sanathkr/yaml | [MIT](https://opensource.org/license/mit/) | -| github.com/sergi/go-diff/diffmatchpatch | [MIT](https://opensource.org/license/mit/) | -| github.com/shopspring/decimal | [MIT](https://opensource.org/license/mit/) | -| github.com/signintech/gopdf | [MIT](https://opensource.org/license/mit/) | -| github.com/sirupsen/logrus | [MIT](https://opensource.org/license/mit/) | -| github.com/skeema/knownhosts | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/spf13/afero | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/spf13/cast | [MIT](https://opensource.org/license/mit/) | -| github.com/spf13/cobra | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/spf13/jwalterweatherman | [MIT](https://opensource.org/license/mit/) | -| github.com/spf13/pflag | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/spf13/viper | [MIT](https://opensource.org/license/mit/) | -| github.com/stoewer/go-strcase | [MIT](https://opensource.org/license/mit/) | -| github.com/stretchr/testify/assert | [MIT](https://opensource.org/license/mit/) | -| github.com/stripe/stripe-go/v71 | [MIT](https://opensource.org/license/mit/) | -| github.com/subosito/gotenv | [MIT](https://opensource.org/license/mit/) | -| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/twpayne/go-vfs/v4 | [MIT](https://opensource.org/license/mit/) | -| github.com/ulikunitz/xz | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/valyala/fastjson | [MIT](https://opensource.org/license/mit/) | -| github.com/vmware/govmomi | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/vmware/govmomi/simulator | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/vmware/govmomi/vim25/json | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/vmware/govmomi/vim25/xml | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| github.com/x448/float16 | [MIT](https://opensource.org/license/mit/) | -| github.com/xanzy/ssh-agent | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xdg-go/pbkdf2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xdg-go/scram | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xdg-go/stringprep | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xeipuuv/gojsonpointer | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xeipuuv/gojsonreference | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xeipuuv/gojsonschema | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xi2/xz | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| github.com/xlab/treeprint | [MIT](https://opensource.org/license/mit/) | -| github.com/youmark/pkcs8 | [MIT](https://opensource.org/license/mit/) | -| github.com/ztrue/shutdown | [MIT](https://opensource.org/license/mit/) | -| go.mongodb.org/mongo-driver | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| go.opencensus.io | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| go.opentelemetry.io/otel | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| go.opentelemetry.io/otel/metric | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| go.opentelemetry.io/otel/trace | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| go.starlark.net | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| go.uber.org/atomic | [MIT](https://opensource.org/license/mit/) | -| go.uber.org/multierr | [MIT](https://opensource.org/license/mit/) | -| golang.org/x/crypto | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/crypto/ed25519 | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/exp | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/exp/maps | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/mod/sumdb/dirhash | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/net | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/net/idna | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/oauth2 | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/sync | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/sync/errgroup | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/sync/semaphore | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/sys | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/sys/unix | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/term | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/text | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| golang.org/x/time/rate | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| gomodules.xyz/jsonpatch/v2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| google.golang.org/api | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| google.golang.org/api/internal/third_party/uritemplates | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| google.golang.org/appengine | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| google.golang.org/genproto/googleapis/api | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| google.golang.org/genproto/googleapis/rpc | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| google.golang.org/genproto/googleapis/rpc/status | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| google.golang.org/grpc | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| google.golang.org/protobuf | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| gopkg.in/check.v1 | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| gopkg.in/inf.v0 | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| gopkg.in/ini.v1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| gopkg.in/square/go-jose.v2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| gopkg.in/square/go-jose.v2/json | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| gopkg.in/validator.v2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| gopkg.in/warnings.v0 | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| gopkg.in/yaml.v2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| gopkg.in/yaml.v3 | [MIT](https://opensource.org/license/mit/) | -| helm.sh/helm/v3 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| ithub.com/sirupsen/logrus | [MIT](https://opensource.org/license/mit/) | -| k8s.io/api | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apiextensions-apiserver/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apiextensions-apiserver/pkg/apis/apiextensions | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apiextensions-apiserver/third_party/forked/celopenapi/model | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apimachinery | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apimachinery/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apimachinery/third_party/forked/golang | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apimachinery/third_party/forked/golang/reflect | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apiserver/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/apiserver/pkg/storage/names | [MIT](https://opensource.org/license/mit/) | -| k8s.io/cli-runtime/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/client-go | [MIT](https://opensource.org/license/mit/) | -| k8s.io/client-go/third_party/forked/golang/template | [MIT](https://opensource.org/license/mit/) | -| k8s.io/cluster-bootstrap/token | [MIT](https://opensource.org/license/mit/) | -| k8s.io/component-base | [MIT](https://opensource.org/license/mit/) | -| k8s.io/component-base/config | [MIT](https://opensource.org/license/mit/) | -| k8s.io/component-base/version | [MIT](https://opensource.org/license/mit/) | -| k8s.io/klog | [MIT](https://opensource.org/license/mit/) | -| k8s.io/klog/v2 | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kube-openapi/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| k8s.io/kube-openapi/pkg/util/proto | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kube-openapi/pkg/validation/errors | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kube-openapi/pkg/validation/spec | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kube-openapi/pkg/validation/strfmt | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kube-openapi/pkg/validation/validate | [MIT](https://opensource.org/license/mit/) | -| k8s.io/kubectl/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/metrics/pkg | [MIT](https://opensource.org/license/mit/) | -| k8s.io/pod-security-admission | [MIT](https://opensource.org/license/mit/) | -| k8s.io/utils | [MIT](https://opensource.org/license/mit/) | -| k8s.io/utils/internal/third_party/forked/golang/net | [MIT](https://opensource.org/license/mit/) | -| kubevirt.io/api | [MIT](https://opensource.org/license/mit/) | -| kubevirt.io/containerized-data-importer-api/pkg/apis/core | [MIT](https://opensource.org/license/mit/) | -| kubevirt.io/controller-lifecycle-operator-sdk/api | [MIT](https://opensource.org/license/mit/) | -| libvirt.org/go/libvirt | [MIT](https://opensource.org/license/mit/) | -| libvirt.org/libvirt-go-xml | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@ant-design/colors | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@ant-design/compatible | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@ant-design/icons | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@ant-design/icons-svg | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/code-frame | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/generator | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-annotate-as-pure | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-environment-visitor | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-function-name | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-hoist-variables | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-module-imports | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-split-export-declaration | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-string-parser | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/helper-validator-identifier | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/highlight | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/parser | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/runtime | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/template | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/traverse | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@babel/types | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@ctrl/tinycolor | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@datadog/browser-logs | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@emotion/is-prop-valid | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@emotion/memoize | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@emotion/stylis | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@emotion/unitless | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@fortawesome/fontawesome-common-types | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@fortawesome/fontawesome-svg-core | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@fortawesome/free-solid-svg-icons | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@fortawesome/react-fontawesome | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@fullstory/browser | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@jridgewell/gen-mapping | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@jridgewell/resolve-uri | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@jridgewell/set-array | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@jridgewell/sourcemap-codec | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@jridgewell/trace-mapping | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/annotations | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/arcs | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/axes | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/@nivo/bar | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/colors | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/core | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/legends | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/@nivo/line | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/pie | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/recompose | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/scales | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/tooltip | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nivo/voronoi | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nodelib/fs.scandir | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nodelib/fs.stat | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@nodelib/fs.walk | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/animated | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/core | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/rafz | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/shared | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/three | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/types | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-spring/web | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@react-three/fiber | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@stripe/react-stripe-js | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@stripe/stripe-js | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/hoist-non-react-statics | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/json-schema | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/node | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/prop-types | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/@types/react | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/react-dom | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/react-reconciler | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/react-redux | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/react-router-dom | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/scheduler | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/semver | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@types/styled-components | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/eslint-plugin | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/parser | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/scope-manager | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/type-utils | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/types | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/typescript-estree | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/utils | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@typescript-eslint/visitor-keys | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/axis | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/event | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/gradient | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/grid | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/group | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/@visx/hierarchy | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/mock-data | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/@visx/responsive | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/@visx/scale | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/@visx/shape | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/@visx/tooltip | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/add-dom-event-listener | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/ajv | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/ansi-styles | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/antd | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/array-union | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/asap | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/async-validator | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/asynckit | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/axios | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/axios-retry | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/babel-plugin-styled-components | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/babel-plugin-syntax-jsx | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/babel-runtime | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/base-64 | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/braces | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/camelize | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/chalk | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/classnames | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/clipboard | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/color | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/color-convert | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/color-name | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/color-string | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/combined-stream | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/component-classes | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/component-indexof | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/connected-react-router | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/core-js | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/create-react-class | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/css-animation | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/css-color-keywords | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/css-to-react-native | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/csstype | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-array | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-color | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-delaunay | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-format | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-interpolate | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-path | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/d3-scale | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-scale-chromatic | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-shape | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-time | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-time | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/d3-time-format | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/data-uri-to-buffer | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/debounce | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/debug | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/decode-uri-component | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/delaunator | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/delayed-stream | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/delegate | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/dir-glob | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/dom-helpers | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/dom-scroll-into-view | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/draft-js | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/encoding | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/escape-string-regexp | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/eslint-scope | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/eslint-utils | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/eslint-visitor-keys | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/esrecurse | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/estraverse | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fast-deep-equal | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fast-glob | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fast-plist | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fastq | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fbjs | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/fetch-blob | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fill-range | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/filter-obj | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/follow-redirects | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/form-data | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/formdata-polyfill | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/fsevents | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/glob-parent | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/globals | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/globby | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/good-listener | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/has-flag | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/history | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/hoist-non-react-statics | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/html-parse-stringify | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/i18next | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/i18next-browser-languagedetector | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/i18next-http-backend | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/i18next-xhr-backend | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/iconv-lite | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/ignore | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/immer | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/immutable | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/immutable | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/internmap | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/is-arrayish | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/is-extglob | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/is-glob | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/is-number | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/is-stream | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/isarray | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/isomorphic-fetch | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/js-tokens | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/jsesc | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/json-schema-traverse | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/jsonc-parser | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/leaflet | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/leaflet.markercluster | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/less | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/lodash | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/lodash.camelcase | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/lodash.isequalwith | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/lodash.upperfirst | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/loose-envify | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/lru-cache | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/lscache | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/merge2 | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/micromatch | [CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/legalcode.en) | -| npmjs.com/package/mime-db | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/mime-types | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/moment | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/monaco-editor | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/monaco-marker-data-provider | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/monaco-themes | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/monaco-worker-manager | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/monaco-yaml | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/ms | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/natural-compare-lite | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/netmask | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/node-domexception | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/node-fetch | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/normalizr | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/object-assign | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/omit.js | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/path-browserify | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/path-to-regexp | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/path-type | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/performance-now | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/picomatch | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/postcss-value-parser | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/prettier | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/promise | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/prop-types | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/punycode | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/query-string | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/queue-microtask | [ISC](https://opensource.org/license/isc-license-txt)
[MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/raf | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/rc-animate | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/rc-editor-core | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/rc-editor-mention | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/rc-form | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/rc-util | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/react-calendar | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-clipboard.js | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-dev-utils | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-dom | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-helmet | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-i18next | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-is | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-js-cron | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-lifecycles-compat | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-merge-refs | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-reconciler | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-redux | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-router | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-router-dom | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-teleporter | [0BSD](https://opensource.org/license/0bsd) | -| npmjs.com/package/react-three-fiber | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/react-transition-group | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/react-use-measure | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/redux | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/redux-debounce-thunk | [BSD-2-Clause](https://opensource.org/license/bsd-2-clause) | -| npmjs.com/package/redux-devtools-extension | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/redux-thunk | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/regenerator-runtime | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/regexpp | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/require-from-string | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/reselect | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/resize-observer-polyfill | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/resolve-pathname | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/reusify | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/rollup | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/run-node | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/run-parallel | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/safer-buffer | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/scheduler | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/seamless-immutable | [ISC](https://opensource.org/license/isc-license-txt) | -| npmjs.com/package/select | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/semver | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/setimmediate | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/shallowequal | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/simple-swizzle | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/slash | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/split-on-first | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/strict-uri-encode | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/styled-components | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/supports-color | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/three | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/tiny-emitter | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/tiny-invariant | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/tiny-warning | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/to-fast-properties | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/to-regex-range | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/tslib | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/tsutils | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/typescript | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/ua-parser-js | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/unique-names-generator | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/uri-js | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/url | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/use-asset | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/utility-types | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/uuid | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/validator | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/value-equal | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/void-elements | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/vscode-languageserver-textdocument | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/vscode-languageserver-types | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/vscode-uri | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/warning | [BSD-3-Clause](https://opensource.org/license/bsd-3-clause) | -| npmjs.com/package/web-streams-polyfill | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/whatwg-fetch | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/yallist | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| npmjs.com/package/yaml | [MIT](https://opensource.org/license/mit/) | -| npmjs.com/package/zustand | [MIT](https://opensource.org/license/mit/) | -| oras.land/oras-go/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api-provider-aws | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api-provider-azure | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api-provider-gcp | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha6 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api-provider-vsphere/apis/v1beta1 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/cluster-api/test/infrastructure/docker/api | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/controller-runtime | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/controller-runtime/pkg | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/gateway-api/apis/v1alpha2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/json | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/kustomize/api | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/kustomize/kyaml | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/kustomize/kyaml/internal/forked/github.com/go-yaml/yaml | [MIT](https://opensource.org/license/mit/) | -| sigs.k8s.io/kustomize/kyaml/internal/forked/github.com/qri-io/starlib/util | [MIT](https://opensource.org/license/mit/) | -| sigs.k8s.io/structured-merge-diff/v4 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/yaml | [MIT](https://opensource.org/license/mit/) | -| sigs.k8s.io/yaml | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | -| sigs.k8s.io/yaml/goyaml.v2 | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | +| Library | License | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| golang.org/x/sync | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| go.uber.org/atomic | [MIT](https://opensource.org/licenses/MIT) | +| golang.org/x/net | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/go-openapi/strfmt | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/google/gofuzz | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/golang/protobuf | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/huandu/xstrings | [MIT](https://opensource.org/licenses/MIT) | +| github.com/phpdave11/gofpdi | [MIT](https://opensource.org/licenses/MIT) | +| github.com/kylelemons/godebug | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/oklog/ulid | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/josharian/intern | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/apimachinery | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-sdk-for-go/sdk/internal | [MIT](https://opensource.org/licenses/MIT) | +| github.com/kelseyhightower/envconfig | [MIT](https://opensource.org/licenses/MIT) | +| github.com/jmespath/go-jmespath | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| google.golang.org/appengine | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/nats-io/nuid | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/dgraph-io/ristretto/z | [MIT](https://opensource.org/licenses/MIT) | +| github.com/vmware/govmomi | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/modern-go/concurrent | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/modern-go/reflect2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| cloud.google.com/go/compute/metadata | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/klauspost/compress | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/nats-io/nats.go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/sirupsen/logrus | [MIT](https://opensource.org/licenses/MIT) | +| github.com/imdario/mergo | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Masterminds/semver | [MIT](https://opensource.org/licenses/MIT) | +| github.com/xdg-go/stringprep | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/vmware/govmomi/vim25/xml | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/bxcodec/faker/v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-openapi/errors | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/google/go-cmp/cmp | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/spf13/pflag | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/hashicorp/golang-lru | [MPL-2.0](#) | +| github.com/go-webauthn/webauthn | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/gorhill/cronexpr | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-openapi/runtime/middleware/denco | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/go-autorest/autorest/validation | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| google.golang.org/protobuf | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Azure/go-autorest/autorest/date | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/xdg-go/scram | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/docker/go-units | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/pkg/browser | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/vmware/govmomi/vim25/json | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/klauspost/pgzip | [MIT](https://opensource.org/licenses/MIT) | +| github.com/mitchellh/mapstructure | [MIT](https://opensource.org/licenses/MIT) | +| gopkg.in/inf.v0 | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/vmware/govmomi/simulator | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mongodb/mongo-tools | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/nats-io/nkeys | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/dgraph-io/ristretto | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-sdk-for-go | [MIT](https://opensource.org/licenses/MIT) | +| golang.org/x/oauth2 | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Azure/go-autorest/logger | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Masterminds/semver/v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/fxamacker/cbor/v2 | [MIT](https://opensource.org/licenses/MIT) | +| google.golang.org/grpc | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/hashicorp/go-uuid | [MPL-2.0](#) | +| github.com/Azure/go-autorest/autorest/to | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns | [MIT](https://opensource.org/licenses/MIT) | +| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/text | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Azure/go-autorest/autorest/adal | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/go-autorest/tracing | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/crypto | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/go-webauthn/x/revoke | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| google.golang.org/api/internal/third_party/uritemplates | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| go.opencensus.io | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/gorilla/mux | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/golang-jwt/jwt/v4 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/cespare/xxhash/v2 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/stretchr/testify/assert | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription | [MIT](https://opensource.org/licenses/MIT) | +| github.com/hashicorp/go-version | [MPL-2.0](#) | +| github.com/AzureAD/microsoft-authentication-library-for-go/apps | [MIT](https://opensource.org/licenses/MIT) | +| sigs.k8s.io/yaml | [MIT](https://opensource.org/licenses/MIT) | +| github.com/davecgh/go-spew/spew | [ISC](https://opensource.org/licenses/ISC) | +| github.com/aws/aws-sdk-go/internal/sync/singleflight | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/evanphx/json-patch/v5 | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/russellhaering/goxmldsig | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-logr/logr | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/coreos/go-oidc/v3/oidc | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/pmezard/go-difflib/difflib | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/gophercloud/gophercloud | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-sdk-for-go/sdk/azidentity | [MIT](https://opensource.org/licenses/MIT) | +| github.com/gophercloud/utils | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| go.mongodb.org/mongo-driver | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-openapi/jsonpointer | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/gogo/protobuf | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/google/go-tpm | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/term | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Masterminds/goutils | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/klauspost/compress/zstd/internal/xxhash | [MIT](https://opensource.org/licenses/MIT) | +| go.uber.org/multierr | [MIT](https://opensource.org/licenses/MIT) | +| github.com/magisterquis/connectproxy | [Zlib](#) | +| github.com/jessevdk/go-flags | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/pkg/errors | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/asaskevich/govalidator | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/client-go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/golang/glog | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/russellhaering/gosaml2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/json-iterator/go | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/klog/v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/andreburgaud/crypt2go | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/go-errors/errors | [MIT](https://opensource.org/licenses/MIT) | +| github.com/mailru/easyjson | [MIT](https://opensource.org/licenses/MIT) | +| emperror.dev/errors | [MIT](https://opensource.org/licenses/MIT) | +| github.com/signintech/gopdf | [MIT](https://opensource.org/licenses/MIT) | +| gopkg.in/yaml.v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/go-autorest/autorest | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/googleapis/enterprise-certificate-proxy/client | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mitchellh/go-homedir | [MIT](https://opensource.org/licenses/MIT) | +| gopkg.in/square/go-jose.v2/json | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/jonboulle/clockwork | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/stripe/stripe-go/v71 | [MIT](https://opensource.org/licenses/MIT) | +| sigs.k8s.io/structured-merge-diff/v4 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/time/rate | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/utils | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/golang-jwt/jwt/v5 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/klauspost/compress/internal/snapref | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/azure-sdk-for-go/sdk/azcore | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-openapi/loads | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/ghodss/yaml | [MIT](https://opensource.org/licenses/MIT) | +| github.com/beevik/etree | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-openapi/spec | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/aws/aws-sdk-go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mitchellh/copystructure | [MIT](https://opensource.org/licenses/MIT) | +| github.com/x448/float16 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-mail/mail | [MIT](https://opensource.org/licenses/MIT) | +| gopkg.in/square/go-jose.v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice | [MIT](https://opensource.org/licenses/MIT) | +| github.com/spf13/cast | [MIT](https://opensource.org/licenses/MIT) | +| github.com/jlaffaye/ftp | [ISC](https://opensource.org/licenses/ISC) | +| github.com/google/uuid | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/shopspring/decimal | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-openapi/analysis | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mitchellh/reflectwalk | [MIT](https://opensource.org/licenses/MIT) | +| github.com/golang/groupcache/lru | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-openapi/runtime | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Masterminds/sprig/v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/gofrs/uuid | [MIT](https://opensource.org/licenses/MIT) | +| github.com/googleapis/gnostic | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/youmark/pkcs8 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/evanphx/json-patch | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/google/s2a-go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/googleapis/gax-go/v2 | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| golang.org/x/sys | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/opentracing/opentracing-go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| google.golang.org/genproto/googleapis/rpc | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mattermost/xml-roundtrip-validator | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/exp | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/dustin/go-humanize | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources | [MIT](https://opensource.org/licenses/MIT) | +| google.golang.org/api | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/go-openapi/swag | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| gopkg.in/yaml.v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-openapi/validate | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/montanaflynn/stats | [MIT](https://opensource.org/licenses/MIT) | +| github.com/xdg-go/pbkdf2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-openapi/jsonreference | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/metrics/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/golang/snappy | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/nats-io/jwt/v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Narasimha1997/ratelimiter | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/apiextensions-apiserver/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/docker/distribution | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/loft-sh/vcluster/pkg/constants | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/coredns/corefile-migration/migration | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/prometheus/client_model/go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/cluster-api-provider-vsphere/apis/v1beta1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mitchellh/hashstructure | [MIT](https://opensource.org/licenses/MIT) | +| sigs.k8s.io/cluster-api-provider-gcp | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| cloud.google.com/go/container | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/munnerz/goautoneg | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/kube-openapi/pkg/validation/spec | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| go.opentelemetry.io/otel/trace | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 | [MIT](https://opensource.org/licenses/MIT) | +| gomodules.xyz/jsonpatch/v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/cluster-bootstrap/token | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/drone/envsubst/v2 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute | [MIT](https://opensource.org/licenses/MIT) | +| github.com/Azure/azure-storage-blob-go/azblob | [MIT](https://opensource.org/licenses/MIT) | +| github.com/matttproud/golang_protobuf_extensions/pbutil | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/component-base | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/apparentlymart/go-cidr/cidr | [MIT](https://opensource.org/licenses/MIT) | +| github.com/spf13/jwalterweatherman | [MIT](https://opensource.org/licenses/MIT) | +| github.com/dimchansky/utfbom | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| libvirt.org/go/libvirt | [MIT](https://opensource.org/licenses/MIT) | +| github.com/loft-sh/cluster-api-provider-vcluster/api/v1alpha1 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/canonical/cluster-api-bootstrap-provider-microk8s/apis/v1beta1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/canonical/cluster-api-control-plane-provider-microk8s/api/v1beta1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/xi2/xz | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/prometheus/client_golang/prometheus | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/antlr/antlr4/runtime/Go/antlr | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/kube-openapi/pkg/validation/validate | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/aws/amazon-vpc-cni-k8s/pkg/apis/crd/v1alpha1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/go-autorest/autorest/azure/cli | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/fsnotify/fsnotify | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/andybalholm/brotli | [MIT](https://opensource.org/licenses/MIT) | +| sigs.k8s.io/cluster-api-provider-azure | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/mod/sumdb/dirhash | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha6 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/pelletier/go-toml/v2 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/sanathkr/yaml | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-logr/stdr | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/blang/semver/v4 | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/kube-openapi/pkg/validation/errors | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/cluster-api-provider-aws | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/metal3-io/ip-address-manager/api/v1alpha1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/coredns/caddy/caddyfile | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/opencontainers/go-digest | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/MakeNowJust/heredoc | [MIT](https://opensource.org/licenses/MIT) | +| github.com/stoewer/go-strcase | [MIT](https://opensource.org/licenses/MIT) | +| sigs.k8s.io/gateway-api/apis/v1alpha2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/client-go/third_party/forked/golang/template | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/PaesslerAG/gval | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/apiserver/pkg/storage/names | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/apiextensions-apiserver/third_party/forked/celopenapi/model | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/hashicorp/hcl | [MPL-2.0](#) | +| github.com/google/cel-go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/ulikunitz/xz | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/kube-openapi/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/valyala/fastjson | [MIT](https://opensource.org/licenses/MIT) | +| github.com/spf13/afero | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/azure-pipeline-go/pipeline | [MIT](https://opensource.org/licenses/MIT) | +| github.com/mholt/archiver/v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/prometheus/procfs | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/cert-manager/cert-manager/pkg/apis | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| gopkg.in/ini.v1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Azure/go-autorest/autorest/azure/auth | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| go.opentelemetry.io/otel | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/spf13/viper | [MIT](https://opensource.org/licenses/MIT) | +| github.com/mattn/go-ieproxy | [MIT](https://opensource.org/licenses/MIT) | +| github.com/emicklei/go-restful/v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/beorn7/perks/quantile | [MIT](https://opensource.org/licenses/MIT) | +| github.com/prometheus/common | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/cluster-api/test/infrastructure/docker/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/google/go-github/v45/github | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/sanathkr/go-yaml | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/apimachinery/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/apimachinery/third_party/forked/golang | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/hashicorp/go-multierror | [MPL-2.0](#) | +| k8s.io/kube-openapi/pkg/validation/strfmt | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/google/go-querystring/query | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| sigs.k8s.io/json | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/cluster-api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/controller-runtime | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/golang/mock/gomock | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/onsi/gomega | [MIT](https://opensource.org/licenses/MIT) | +| github.com/gobuffalo/flect | [MIT](https://opensource.org/licenses/MIT) | +| github.com/magiconair/properties | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| google.golang.org/genproto/googleapis/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/PaesslerAG/jsonpath | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/awslabs/goformation/v4 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/sync/semaphore | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| libvirt.org/libvirt-go-xml | [MIT](https://opensource.org/licenses/MIT) | +| github.com/hashicorp/errwrap | [MPL-2.0](#) | +| github.com/subosito/gotenv | [MIT](https://opensource.org/licenses/MIT) | +| github.com/dsnet/compress | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/utils/internal/third_party/forked/golang/net | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/google/gnostic | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/blang/semver | [MIT](https://opensource.org/licenses/MIT) | +| github.com/nwaples/rardecode | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/pierrec/lz4/v4 | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/rancher/wrangler/pkg/genericcondition | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| cloud.google.com/go/container/apiv1/containerpb | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/yaml/goyaml.v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/juliangruber/go-intersect | [MIT](https://opensource.org/licenses/MIT) | +| github.com/rancher/system-upgrade-controller/pkg/apis | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/goharbor/go-client/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/openshift/custom-resource-status/conditions/v1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/corvus-ch/logr | [MIT](https://opensource.org/licenses/MIT) | +| github.com/openshift/api/config/v1 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/pborman/uuid | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| kubevirt.io/containerized-data-importer-api/pkg/apis/core | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/avast/retry-go | [MIT](https://opensource.org/licenses/MIT) | +| github.com/bketelsen/logr | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/ztrue/shutdown | [MIT](https://opensource.org/licenses/MIT) | +| kubevirt.io/controller-lifecycle-operator-sdk/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/yaml | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/matttproud/golang_protobuf_extensions/v2/pbutil | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| go.opentelemetry.io/otel/metric | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/jpillora/backoff | [MIT](https://opensource.org/licenses/MIT) | +| github.com/kyverno/go-wildcard | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| kubevirt.io/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/jasonlvhit/gocron | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/google/martian/log | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/twpayne/go-vfs/v4 | [MIT](https://opensource.org/licenses/MIT) | +| google.golang.org/genproto/googleapis/rpc/status | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/PuerkitoBio/purell | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/PuerkitoBio/urlesc | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/go-stack/stack | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/kube-openapi/pkg/util/proto | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/controller-runtime/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/sys/unix | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| golang.org/x/crypto/ed25519 | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/component-base/config | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/apiextensions-apiserver/pkg/apis/apiextensions | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/avast/retry-go/v4 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/bshuster-repo/logrus-logstash-hook | [MIT](https://opensource.org/licenses/MIT) | +| github.com/docker/distribution/uuid | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/kr/pretty | [MIT](https://opensource.org/licenses/MIT) | +| github.com/docker/go-metrics | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/spf13/cobra | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/gorilla/handlers | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/xeipuuv/gojsonschema | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/xeipuuv/gojsonreference | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/docker/libtrust | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| gopkg.in/check.v1 | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/kr/text | [MIT](https://opensource.org/licenses/MIT) | +| github.com/xeipuuv/gojsonpointer | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/klauspost/compress | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| golang.org/x/net/idna | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| gopkg.in/validator.v2 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/google/go-github/github | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/gorilla/websocket | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/google/gnostic-models | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/flynn/go-shlex | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/golang/protobuf/proto | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| k8s.io/klog | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| golang.org/x/exp/maps | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| sigs.k8s.io/kustomize/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mxk/go-flowrate/flowrate | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/rubenv/sql-migrate/sqlparse | [MIT](https://opensource.org/licenses/MIT) | +| github.com/docker/cli/cli/config | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/gregjones/httpcache | [MIT](https://opensource.org/licenses/MIT) | +| github.com/graph-gophers/graphql-go | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/emirpasic/gods | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/devfile/api/v2/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/russross/blackfriday/v2 | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/lib/pq | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/component-base/version | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/cloudflare/circl | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/jbenet/go-context/io | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/apiserver/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/google/shlex | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/lann/ps | [MIT](https://opensource.org/licenses/MIT) | +| github.com/sergi/go-diff/diffmatchpatch | [MIT](https://opensource.org/licenses/MIT) | +| github.com/exponent-io/jsonpath | [MIT](https://opensource.org/licenses/MIT) | +| github.com/rubenv/sql-migrate | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/pod-security-admission | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/rawagner/graphql-transport-ws/graphqlws | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/rawagner/graphql-transport-ws/graphqlws/internal/connection | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| sigs.k8s.io/kustomize/kyaml/internal/forked/github.com/qri-io/starlib/util | [MIT](https://opensource.org/licenses/MIT) | +| github.com/devfile/registry-support/index/generator/schema | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/gosuri/uitable/util/wordwrap | [MIT](https://opensource.org/licenses/MIT) | +| sigs.k8s.io/kustomize/kyaml | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/distribution/distribution/v3/reference | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/operator-framework/api/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/gosuri/uitable | [MIT](https://opensource.org/licenses/MIT) | +| github.com/mattn/go-isatty | [MIT](https://opensource.org/licenses/MIT) | +| github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/lann/builder | [MIT](https://opensource.org/licenses/MIT) | +| helm.sh/helm/v3 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/ProtonMail/go-crypto | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/go-git/gcfg | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/monochromegane/go-gitignore | [MIT](https://opensource.org/licenses/MIT) | +| github.com/jmoiron/sqlx | [MIT](https://opensource.org/licenses/MIT) | +| github.com/kevinburke/ssh_config | [MIT](https://opensource.org/licenses/MIT) | +| github.com/docker/go-connections/tlsconfig | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/fatih/color | [MIT](https://opensource.org/licenses/MIT) | +| github.com/opencontainers/image-spec/specs-go | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-git/go-git/v5 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/skeema/knownhosts | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| gopkg.in/warnings.v0 | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| github.com/felixge/httpsnoop | [MIT](https://opensource.org/licenses/MIT) | +| github.com/docker/docker | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/coreos/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/kubectl/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| sigs.k8s.io/kustomize/kyaml/internal/forked/github.com/go-yaml/yaml | [MIT](https://opensource.org/licenses/MIT) | +| github.com/go-git/go-billy/v5 | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/operator-framework/operator-registry/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/distribution/reference | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| k8s.io/cli-runtime/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/xlab/treeprint | [MIT](https://opensource.org/licenses/MIT) | +| go.starlark.net | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| oras.land/oras-go/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/operator-framework/kubectl-operator/pkg/action | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/pquerna/cachecontrol | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mattn/go-runewidth | [MIT](https://opensource.org/licenses/MIT) | +| github.com/liggitt/tabwriter | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/moby/spdystream | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/openshift/api | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/openshift/console | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/moby/locker | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/BurntSushi/toml | [MIT](https://opensource.org/licenses/MIT) | +| github.com/mitchellh/go-wordwrap | [MIT](https://opensource.org/licenses/MIT) | +| github.com/devfile/library/v2/pkg | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/xanzy/ssh-agent | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/peterbourgon/diskv | [MIT](https://opensource.org/licenses/MIT) | +| github.com/docker/docker-credential-helpers | [MIT](https://opensource.org/licenses/MIT) | +| github.com/moby/term | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/devfile/registry-support/registry-library/library | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/go-gorp/gorp/v3 | [MIT](https://opensource.org/licenses/MIT) | +| github.com/coreos/go-oidc | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/containerd/log | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/mattn/go-colorable | [MIT](https://opensource.org/licenses/MIT) | +| github.com/pjbgf/sha1cd | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/cyphar/filepath-securejoin | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/google/btree | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| dario.cat/mergo | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/gobwas/glob | [MIT](https://opensource.org/licenses/MIT) | +| github.com/chai2010/gettext-go | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/openshift/library-go/pkg/crypto | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/containerd/containerd | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| github.com/Masterminds/squirrel | [MIT](https://opensource.org/licenses/MIT) | +| k8s.io/apimachinery/third_party/forked/golang/reflect | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| github.com/nicksnyder/go-i18n/v2 | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ajv | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/antd | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@ant-design/compatible | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@ant-design/icons | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/axios | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/axios-retry | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/base-64 | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/clipboard | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/color | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/connected-react-router | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@datadog/browser-logs | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/fast-deep-equal | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@fortawesome/fontawesome-svg-core | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@fortawesome/free-solid-svg-icons | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@fortawesome/react-fontawesome | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@fullstory/browser | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/history | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/i18next | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/i18next-browser-languagedetector | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/i18next-http-backend | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/immer | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/leaflet | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/leaflet.markercluster | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/less | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/lodash | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/lscache | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/moment | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/monaco-editor | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/monaco-themes | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/monaco-yaml | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/netmask | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/bar | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/core | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/line | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/pie | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/normalizr | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/prettier | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/query-string | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-calendar | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-clipboard.js | [CC0-1.0](https://opensource.org/licenses/CC0-1.0) | +| https://www.npmjs.com/package/react-dev-utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-dom | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-helmet | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-i18next | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-js-cron | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-redux | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-router | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-router-dom | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/core | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/three | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/web | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-teleporter | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-three/fiber | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-transition-group | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/redux | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/redux-debounce-thunk | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/redux-devtools-extension | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/redux-thunk | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/reselect | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/run-node | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/semver | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/@stripe/react-stripe-js | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@stripe/stripe-js | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/styled-components | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/three | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/typescript | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/@typescript-eslint/eslint-plugin | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@typescript-eslint/parser | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/@types/node | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/react | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/react-dom | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/react-redux | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/react-router-dom | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/styled-components | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/unique-names-generator | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/url | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/uuid | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/validator | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/axis | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/event | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/gradient | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/grid | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/group | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/hierarchy | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/mock-data | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/responsive | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/scale | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/shape | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/tooltip | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/yaml | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/add-dom-event-listener | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/address | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ajv-keywords | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ansi-regex | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ansi-styles | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@ant-design/colors | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@ant-design/icons-svg | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/anymatch | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/array-union | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/asap | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/asynckit | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/async-validator | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/at-least-node | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/@babel/code-frame | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/generator | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-annotate-as-pure | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-environment-visitor | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-function-name | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-hoist-variables | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-module-imports | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-split-export-declaration | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/helper-validator-identifier | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/highlight | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/parser | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/babel-plugin-styled-components | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/babel-plugin-syntax-jsx | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/runtime | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/babel-runtime | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/template | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/traverse | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@babel/types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/balanced-match | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/binary-extensions | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/brace-expansion | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/braces | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/browserslist | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/callsites | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/camelize | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/caniuse-lite | [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/deed.en) | +| https://www.npmjs.com/package/chalk | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/chokidar | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/classnames | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/color-convert | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/color-name | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/color-string | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/combined-stream | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/component-classes | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/component-indexof | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/concat-map | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/copy-anything | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/core-js | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/cosmiconfig | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/create-react-class | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/cross-fetch | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/cross-spawn | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/css-animation | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/css-color-keywords | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/css-to-react-native | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/csstype | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@ctrl/tinycolor | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/d3-array | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-color | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-delaunay | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/d3-format | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/d3-format | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-hierarchy | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/d3-interpolate | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/d3-interpolate | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-path | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/d3-random | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-scale | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-scale-chromatic | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/d3-shape | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-time | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/d3-time | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/d3-time-format | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/@datadog/browser-core | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/debounce | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/debug | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/decode-uri-component | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/deepmerge | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/define-lazy-prop | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/delaunator | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/delayed-stream | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/delegate | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/detect-port-alt | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/dir-glob | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/dom-helpers | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/dom-scroll-into-view | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/draft-js | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/duplexer | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/electron-to-chromium | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/@emotion/is-prop-valid | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@emotion/memoize | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@emotion/stylis | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@emotion/unitless | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/encoding | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/errno | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/error-ex | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/escalade | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/escape-string-regexp | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/eslint-scope | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/eslint-utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/eslint-visitor-keys | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/esrecurse | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/estraverse | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/fast-glob | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/fast-plist | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/fastq | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/fbjs | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/filesize | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/fill-range | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/filter-obj | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/find-up | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/follow-redirects | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/fork-ts-checker-webpack-plugin | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/form-data | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@fortawesome/fontawesome-common-types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/fsevents | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/fs-extra | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/fs-monkey | [Unlicense](https://unlicense.org/) | +| https://www.npmjs.com/package/fs.realpath | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/functional-red-black-tree | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/get-user-locale | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/glob | [CC-BY-SA-4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.en) | +| https://www.npmjs.com/package/global-modules | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/global-prefix | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/globals | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/globby | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/glob-parent | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/good-listener | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/graceful-fs | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/gzip-size | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/has-flag | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/hoist-non-react-statics | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/html-parse-stringify | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/iconv-lite | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ignore | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/image-size | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/immutable | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/immutable | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/import-fresh | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/inflight | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/inherits | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/ini | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/internmap | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/isarray | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-arrayish | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-binary-path | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-docker | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/isexe | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/is-extglob | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-glob | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-number | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/isomorphic-fetch | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-retry-allowed | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-root | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-stream | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-what | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/is-wsl | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@jridgewell/gen-mapping | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@jridgewell/resolve-uri | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@jridgewell/set-array | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@jridgewell/sourcemap-codec | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@jridgewell/trace-mapping | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/jsesc | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/jsonc-parser | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/jsonfile | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/json-parse-even-better-errors | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/json-schema-traverse | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/js-tokens | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@juggle/resize-observer | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | +| https://www.npmjs.com/package/kind-of | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/kleur | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/lines-and-columns | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/loader-utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/locate-path | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/lodash.camelcase | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/lodash.isequalwith | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/lodash.once | [CC0-1.0](https://opensource.org/licenses/CC0-1.0) | +| https://www.npmjs.com/package/lodash.upperfirst | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/loose-envify | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/lru-cache | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/make-dir | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/math-expression-evaluator | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/memfs | [Unlicense](https://unlicense.org/) | +| https://www.npmjs.com/package/merge2 | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/merge-class-names | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/micromatch | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/mime | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/mime-db | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/mime-types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/mini-create-react-context | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/minimatch | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/monaco-marker-data-provider | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/monaco-worker-manager | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ms | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/needle | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/annotations | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/arcs | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/axes | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/colors | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/legends | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/recompose | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/scales | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/tooltip | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nivo/voronoi | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/node-fetch | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nodelib/fs.scandir | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nodelib/fs.stat | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@nodelib/fs.walk | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/node-releases | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/normalize-path | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/object-assign | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/omit.js | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/once | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/open | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/parent-module | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/parse-json | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/parse-node-version | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/path-browserify | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/path-exists | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/path-is-absolute | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/path-key | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/path-to-regexp | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/path-type | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/performance-now | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/picocolors | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/picomatch | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/pify | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/pkg-up | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/p-limit | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/p-locate | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/postcss-value-parser | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/promise | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/prompts | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/prop-types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/prr | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/p-try | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/punycode | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/querystring | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/queue-microtask | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/raf | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/rc-animate | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/rc-editor-core | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/rc-editor-mention | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/rc-form | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/rc-util | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-error-overlay | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-fast-compare | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-is | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-lifecycles-compat | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-merge-refs | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-reconciler | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-side-effect | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/animated | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/rafz | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/shared | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@react-spring/types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-three-fiber | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/react-use-measure | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/readdirp | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/recursive-readdir | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/reduce-css-calc | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/reduce-function-call | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/regenerator-runtime | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/regexpp | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/require-from-string | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/resize-observer-polyfill | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/resolve-from | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/resolve-pathname | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/reusify | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/rollup | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/run-parallel | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/safer-buffer | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/sax | [ISC](https://opensource.org/licenses/ISC), [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/scheduler | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/schema-utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/seamless-immutable | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/select | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/setimmediate | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/shallowequal | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/shebang-command | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/shebang-regex | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/shell-quote | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/simple-swizzle | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/sisteransi | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/slash | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/source-map | [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) | +| https://www.npmjs.com/package/split-on-first | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/strict-uri-encode | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/strip-ansi | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/supports-color | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/tapable | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/text-table | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/tiny-emitter | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/tiny-invariant | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/tiny-warning | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/to-fast-properties | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/to-regex-range | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/tr46 | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/tslib | [0BSD](https://opensource.org/licenses/0BSD) | +| https://www.npmjs.com/package/tsutils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/clipboard | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@typescript-eslint/scope-manager | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@typescript-eslint/types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@typescript-eslint/typescript-estree | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/@typescript-eslint/type-utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@typescript-eslint/utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@typescript-eslint/visitor-keys | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-color | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-hierarchy | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-interpolate | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-path | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-random | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-scale | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-shape | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/d3-time | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/history | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/hoist-non-react-statics | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/json-schema | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/lodash | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/parse-json | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/prop-types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/react-reconciler | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/react-router | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@types/scheduler | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/ua-parser-js | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/universalify | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/update-browserslist-db | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/uri-js | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/use-asset | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/utility-types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/value-equal | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/bounds | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/curve | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/point | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/@visx/text | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/void-elements | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/vscode-languageserver-textdocument | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/vscode-languageserver-types | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/vscode-uri | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/warning | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/webidl-conversions | [BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) | +| https://www.npmjs.com/package/webpack | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/whatwg-fetch | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/whatwg-url | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/which | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/@wojtekmaj/date-utils | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/wrappy | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/yallist | [ISC](https://opensource.org/licenses/ISC) | +| https://www.npmjs.com/package/yocto-queue | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/zustand | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/i18next-xhr-backend | [MIT](https://opensource.org/licenses/MIT) | +| https://www.npmjs.com/package/prettier | [Apache-2.0](https://opensource.org/licenses/Apache-2.0) | diff --git a/docs/docs-content/release-notes/known-issues.md b/docs/docs-content/release-notes/known-issues.md index 4f00b5826b..bf03d2ede0 100644 --- a/docs/docs-content/release-notes/known-issues.md +++ b/docs/docs-content/release-notes/known-issues.md @@ -16,6 +16,8 @@ The following table lists all known issues that are currently active and affecti | Description | Workaround | Publish Date | Product Component | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ---------------------------- | +| If an Edge host operating a cluster in connected mode loses connection to Palette, the cluster will not auto-renew its Public Key Infrastructure (PKI) certificates. When it re-establishes the connection to Palette, the Edge host will renew the certificates if the existing certificates have less than 30 days before expiry. | No workaround available. | Sep 14, 2024 | Edge | +| Using the Flannel Container Network Interface (CSI) pack together with a Red Hat Enterprise Linux (RHEL)-based provider image may lead to a pod becoming stuck during deployment. This is caused by an upstream issue with Flannel that was discovered in a K3s GitHub issue. Refer to [the K3s issue page](https://github.com/k3s-io/k3s/issues/5013) for more information. | No workaround is available | Sep 14, 2024 | Edge | | Palette OVA import operations fail if the VMO cluster is using a storageClass with the volume bind method `WaitForFirstConsumer`. | Refer to the [OVA Imports Fail Due To Storage Class Attribute](../troubleshooting/vmo-issues.md#scenario---ova-imports-fail-due-to-storage-class-attribute) troubleshooting guide for workaround steps. | September 13, 2024 | Palette CLI, VMO | | Persistent Volume Claims (PVCs) metadata do not use a unique identifier for self-hosted Palette clusters. This causes incorrect Cloud Native Storage (CNS) mappings in vSphere, potentially leading to issues during node operations and cluster upgrades. | Refer to the [Troubleshooting section](../troubleshooting/enterprise-install.md#non-unique-vsphere-cns-mapping) for guidance. | September 13, 2024 | Self-hosted | | Third-party binaries downloaded and used by the Palette CLI may become stale and incompatible with the CLI. | Refer to the [Incompatible Stale Palette CLI Binaries](../troubleshooting/automation.md#scenario---incompatible-stale-palette-cli-binaries) troubleshooting guide for workaround guidance. | September 11, 2024 | CLI | diff --git a/docs/docs-content/release-notes/release-notes.md b/docs/docs-content/release-notes/release-notes.md index d3b8b9a889..6567b73ce4 100644 --- a/docs/docs-content/release-notes/release-notes.md +++ b/docs/docs-content/release-notes/release-notes.md @@ -11,6 +11,207 @@ tags: ["release-notes"] +## Sept 14, 2024 - Release 4.4.18 + +### Palette Enterprise {#release-4-4-18} + +##### Features + +- Palette will not remove pods with the toleration key node.kubernetes.io/unschedulable set to NoSchedule. This is + useful for scenarios where a pod may behave as a DaemonSet but is not a DaemonSet, such as the Portworx operator pod, + and you don't want it to be removed during node drain operations. Refer to the + [Pod Drainage Toleration](../clusters/cluster-management/node-pool.md#pod-drainage-toleration) section for more + information on using the new behavior. + +##### Improvements + +- Several enhancements have been made to the Clusters view in the Palette UI. These changes ensure a consistent and + user-friendly experience, including new designs for the cluster selection screen and a customizable, powerful grid + view. This redesign provides a better user experience for managing clusters in large-scale environments. Refer to the + [Cluster Grid View](../clusters/clusters.md#organize-cluster-grid) section to learn more. + +##### Bug Fixes + +- Fixed an issue where Persistent Volume Claims (PVCs) metadata did not use a unique identifier for the self-hosted + Palette cluster. As a result, + [Cloud Native Storage](https://blogs.vmware.com/virtualblocks/2019/08/14/introducing-cloud-native-storage-for-vsphere/) + (CSN) mappings to PVCs belonging to a specific self-hosted cluster were incorrect, potentially causing issues during + various cluster node operations. This issue affects all self-hosted versions of Palette and VerteX before to 4.4.14 + and must be addressed before upgrading to version 4.4.18 or higher. Refer to the + [Non-unique vSphere CNS Mapping](../troubleshooting/enterprise-install.md) troubleshooting guide for more information + on how to resolve this issue. + +#### Deprecations and Removals + +- Palette's internal message communication between components transitioned from NATS to gRPC. The previous usage of NATS + has been deprecated and will be removed in a future release. This change primarily affects customers using Palette + agents on versions older than 4.0. If your tenant clusters still use agents on version 3.x or older, + [resume agent upgrades](../clusters/cluster-management/platform-settings/pause-platform-upgrades.md) to avoid + disrupting critical functions such as health monitoring and heartbeat publishing. To learn more about Palette's + internal network architecture, refer to the [Network Ports](../architecture/networking-ports.md) page. If you are + using network proxies, we recommend you review the [gRPC and Proxies](../architecture/grps-proxy.md) documentation for + potential issues. + +### Edge + +#### Breaking Changes + +- Edge hosts will no longer expose a QR code during the registration phase by default. Users who want a QR code + generated during this phase must specify a registration URL in the Edge Installer user data configuration file. Refer + to the [Edge Installer User Data Configuration](../clusters/edge/edge-configuration/edge-configuration.md) reference + page for more information. + +#### Features + +- You can now configure the Maximum Transmission Unit (MTU) for network interface configured for discovery though + Dynamic Host Configuration Protocol (DHCP) when using [Local UI](../clusters/edge//local-ui/local-ui.md). + +- Manual and automatic Kubernetes certificate renewal for control plane nodes is now available to Edge clusters managed + by Palette. This feature is available for the following Kubernetes distributions K3s, RKE2, and PXK-E. The new process + for certificate renewal leverages the command `kubeadm certs renew`, ensuring certificates update without requiring + node reboots. Refer to the [Certificate Management](../clusters/cluster-management/certificate-management.md) + documentation to learn more. + +- Local UI now supports Edge hosts in _connected mode_. Previously, Local UI only supported Edge hosts in airgap mode. + This change allows users to manage connected Edge hosts using Local UI. To learn more, refer to the + [Local UI](../clusters/edge/local-ui/local-ui.md) documentation. + +#### Improvements + +- Several improvements have been made to the [Local UI](../clusters/edge/local-ui/local-ui.md)'s Terminal User Interface + (TUI) to enhance the user experience. These improvements include more visible options menus, automatic configuration + save upon exit, improved color scheme, and more. + +### Virtual Machine Orchestrator + +#### Features + +- Virtual Machines deployed with VMO now receive unique and random MAC addresses. This change ensures that MAC addresses + are unique across all VMs in the same network, preventing conflicts and ensuring proper network communication. + Previously, you were responsible for ensuring MAC address uniqueness, which could lead to conflicts and network issues + if not managed correctly. Check out the + [MAC Address Management](../vm-management/architecture.md#mac-address-management) section of the VMO architecture + documentation to learn more. + +#### Improvements + +- VM memory management now supports the + [Kubevirt Memory Hotplug](https://kubevirt.io/user-guide/compute/memory_hotplug/). This feature allows you to increase + or decrease the memory allocated to a VM without requiring a VM restart. Refer to the + [Manage CPU and Memory](../vm-management/create-manage-vm/enable-cpu-hotplug.md) documentation to learn more. + +### VerteX + +#### Features + +- Includes all Palette features and improvements in this release. Refer to the [Palette](#release-4-4-18) section for + more details + +### Automation + +#### Features + +- The Palette CLI is now compiled with FIPS-compliant cryptographic libraries, ensuring that it can be used in + FIPS-compliant environments. Check out the [Downloads](../spectro-downloads.md) page to download the latest version of + the Palette CLI. + +#### Improvements + +- The Palette CLI has been updated to improve the user experience by adding detailed warning messages and providing + additional information before selecting options. The new changes include clarifying the node affinity prompt for the + PCG deployment and providing more information about the deployment process. Renaming **DDNS** to **DHCP** and + providing a delete command for kind clusters when multiple kind clusters are detected locally. + +- The Palette CLI `ec install` command's validate flag can now be used in environments where a network proxy is + configured. When specified in the environment, the validate flag will honor the `NO_PROXY`,`HTTP_PROXY`, + and `HTTPS_PROXY` environment variables. Additionally, the validate flag will now check for connectivity and access to + image registries specified during the installation process. Refer to the + [Validate Environment](../automation/palette-cli/commands/ec.md#validate-environment) section of the Palette EC + command documentation to learn more about the validate flag. + +### Packs + +#### Pack Notes + + +- Users of Portworx CSI, review the [node repave interval](../clusters/cluster-management/node-pool.md#worker-node-pool) configured on worker pools. Ensure sufficient time is allotted for Portworx to initialize on a newly repaved cluster node. Otherwise, the Portworx pod may encounter issues during the node repave process. Refer to the README for more information. + +#### Kubernetes + +| Pack | New Version | +| ---------------------------------------- | ----------- | +| K3s | 1.28.13 | +| K3s | 1.29.8 | +| K3s | 1.30.4 | +| Kubernetes AKS | 1.30 | +| Kubernetes EKS | 1.30 | +| Kubernetes GKE | 1.30 | +| Palette eXtended Kubernetes (PXK) | 1.28.13 | +| Palette eXtended Kubernetes (PXK) | 1.29.8 | +| Palette eXtended Kubernetes (PXK) | 1.30.4 | +| Palette eXtended Kubernetes Edge (PXK-E) | 1.28.13 | +| Palette eXtended Kubernetes Edge (PXK-E) | 1.29.8 | +| Palette eXtended Kubernetes Edge (PXK-E) | 1.30.4 | +| RKE2 | 1.28.12 | +| RKE2 | 1.29.7 | +| RKE2 | 1.30.3 | +| RKE3 - Edge | 1.28.12 | +| RKE3 - Edge | 1.29.7 | +| RKE3 - Edge | 1.30.3 | + +#### CNI + +| Pack | New Version | +| ------- | ----------- | +| Calico | 3.28.1 | +| Cilium | 1.16.0 | +| Flannel | 0.25.5 | + +#### CSI + +| Pack | New Version | +| ----------- | ----------- | +| Longhorn | 1.6.2 | +| vSphere CSI | 3.3.1 | + +#### Add-on Packs + +| Pack | New Version | +| ---------------------------------------- | ----------- | +| Crossplane | 1.7.0 | +| Crossplane | 1.16.0 | +| Harbor - Edge | 1.1.0 | +| Kyverno | 1.12.2 | +| MetalLB | 0.14.8 | +| Palette eXtended Kubernetes (PXK) | 1.28.13 | +| Palette eXtended Kubernetes (PXK) | 1.29.8 | +| Palette eXtended Kubernetes (PXK) | 1.30.4 | +| Palette eXtended Kubernetes Edge (PXK-E) | 1.28.13 | +| Palette eXtended Kubernetes Edge (PXK-E) | 1.29.8 | +| Palette eXtended Kubernetes Edge (PXK-E) | 1.30.4 | +| RKE3 - Edge | 1.28.12 | +| RKE3 - Edge | 1.29.7 | +| RKE3 - Edge | 1.30.3 | +| Volume Snapshot Controller | 8.0.1 | + +#### FIPS + +| Pack | New Version | +| ----------- | ----------- | +| Calico | 3.28.1 | +| Flannel | 0.25.5 | +| Longhorn | 1.6.2 | +| vSphere CSI | 3.3.1 | + +#### Deprecations and Removals + +- All Kubernetes 1.27.x versions are deprecated. + +- MetalLB 0.14.3 is deprecated. + +- Review the [Deprecated Packs](../integrations/deprecated-packs.md) page for a complete list of deprecated and removed + packs. + ## Aug 17, 2024 - Release 4.4.14 @@ -161,10 +362,10 @@ This release is specific to Palette Enterprise and does not apply to Palette Ver ### Docs and Education -Palette's Go SDK now has a dedicated documentation section. The new section also includes a guide on how to install, -configure, and use the SDK. This guide provides instructions and sample code for listing the active clusters in your -Palette environment. Check out the [Palette Go SDK documentation](../automation/palette-sdk/palette-sdk.md) for more -details. +- Palette's Go SDK now has a dedicated documentation section. The new section also includes a guide on how to install, + configure, and use the SDK. This guide provides instructions and sample code for listing the active clusters in your + Palette environment. Check out the [Palette Go SDK documentation](../automation/palette-sdk/palette-sdk.md) for more + details. ## Jul 31, 2024 - Release 4.4.12 diff --git a/docs/docs-content/security-bulletins/reports/cve-2022-45061.md b/docs/docs-content/security-bulletins/reports/cve-2022-45061.md index 4d658bf125..35f546c53d 100644 --- a/docs/docs-content/security-bulletins/reports/cve-2022-45061.md +++ b/docs/docs-content/security-bulletins/reports/cve-2022-45061.md @@ -39,9 +39,9 @@ Ongoing ## Affected Products & Versions -- Palette VerteX 4.4.17 +- Palette VerteX 4.4.18 ## Revision History - 1.0 9/13/2024 Initial Publication -- 2.0 9/13/2024 Added Palette VerteX 4.4.17 to Affected Products +- 2.0 9/13/2024 Added Palette VerteX 4.4.18 to Affected Products diff --git a/docs/docs-content/security-bulletins/reports/cve-2022-48560.md b/docs/docs-content/security-bulletins/reports/cve-2022-48560.md index f501207560..4bd6f68ecf 100644 --- a/docs/docs-content/security-bulletins/reports/cve-2022-48560.md +++ b/docs/docs-content/security-bulletins/reports/cve-2022-48560.md @@ -34,9 +34,9 @@ Ongoing ## Affected Products & Versions -- Palette VerteX 4.4.17 +- Palette VerteX 4.4.18 ## Revision History - 1.0 9/13/2024 Initial Publication -- 2.0 9/13/2024 Added Palette VerteX 4.4.17 to Affected Products +- 2.0 9/13/2024 Added Palette VerteX 4.4.18 to Affected Products diff --git a/docs/docs-content/security-bulletins/reports/cve-2022-48565.md b/docs/docs-content/security-bulletins/reports/cve-2022-48565.md index 6bc8d3c6b0..f94a35f3c1 100644 --- a/docs/docs-content/security-bulletins/reports/cve-2022-48565.md +++ b/docs/docs-content/security-bulletins/reports/cve-2022-48565.md @@ -35,9 +35,9 @@ Ongoing ## Affected Products & Versions -- Palette VerteX 4.4.17 +- Palette VerteX 4.4.18 ## Revision History - 1.0 9/13/2024 Initial Publication -- 2.0 9/13/2024 Added Palette VerteX 4.4.17 to Affected Products +- 2.0 9/13/2024 Added Palette VerteX 4.4.18 to Affected Products diff --git a/docs/docs-content/security-bulletins/reports/cve-2023-24329.md b/docs/docs-content/security-bulletins/reports/cve-2023-24329.md index 88f7379635..0faa8744f6 100644 --- a/docs/docs-content/security-bulletins/reports/cve-2023-24329.md +++ b/docs/docs-content/security-bulletins/reports/cve-2023-24329.md @@ -35,9 +35,9 @@ Ongoing ## Affected Products & Versions -- Palette VerteX 4.4.17 +- Palette VerteX 4.4.18 ## Revision History - 1.0 9/13/2024 Initial Publication -- 2.0 9/13/2024 Added Palette VerteX 4.4.17 to Affected Products +- 2.0 9/13/2024 Added Palette VerteX 4.4.18 to Affected Products diff --git a/docs/docs-content/security-bulletins/reports/cve-2024-3651.md b/docs/docs-content/security-bulletins/reports/cve-2024-3651.md index 4107732e77..8700be3255 100644 --- a/docs/docs-content/security-bulletins/reports/cve-2024-3651.md +++ b/docs/docs-content/security-bulletins/reports/cve-2024-3651.md @@ -38,9 +38,9 @@ Ongoing ## Affected Products & Versions -- Palette VerteX 4.4.17 +- Palette VerteX 4.4.18 ## Revision History - 1.0 9/13/2024 Initial Publication -- 2.0 9/13/2024 Added Palette VerteX 4.4.17 to Affected Products +- 2.0 9/13/2024 Added Palette VerteX 4.4.18 to Affected Products diff --git a/docs/docs-content/security-bulletins/reports/reports.md b/docs/docs-content/security-bulletins/reports/reports.md index 6a9789d592..4f2a0a7a11 100644 --- a/docs/docs-content/security-bulletins/reports/reports.md +++ b/docs/docs-content/security-bulletins/reports/reports.md @@ -35,42 +35,42 @@ Click on the CVE ID to view the full details of the vulnerability. | CVE ID | Initial Pub Date | Modified Date | Product Version | Vulnerability Type | CVSS Severity | Status | | ----------------------------------------------- | ---------------- | ------------- | ------------------------ | --------------------------------------- | -------------------------------------------------------- | --------------------------- | -| [CVE-2024-21626](./cve-2024-21626.md) | 1/3/24 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: kube-proxy | [8.6](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) | :mag: Ongoing | -| [CVE-2022-41723](./cve-2022-41723.md) | 2/28/23 | 11/25/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: CoreDNS | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41723) | :mag: Ongoing | -| [GHSA-m425-mq94-257g](./ghsa-m425-mq94-257g.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: CoreDNS | [7.5](https://github.com/advisories/GHSA-m425-mq94-257g) | :mag: Ongoing | -| [CVE-2023-45142](./cve-2023-45142.md) | 10/12/23 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-45142) | :mag: Ongoing | -| [CVE-2023-0464](./cve-2023-0464.md) | 3/22/23 | 6/21/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: OpenSSL | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-0464) | :mag: Ongoing | -| [CVE-2023-39325](./cve-2023-39325.md) | 10/11/23 | 4/28/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: Go project | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-39325) | :mag: Ongoing | -| [CVE-2023-47108](./cve-2023-47108.md) | 11/20/23 | 11/20/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-47108) | :mag: Ongoing | +| [CVE-2024-21626](./cve-2024-21626.md) | 1/3/24 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: kube-proxy | [8.6](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) | :mag: Ongoing | +| [CVE-2022-41723](./cve-2022-41723.md) | 2/28/23 | 11/25/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: CoreDNS | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41723) | :mag: Ongoing | +| [GHSA-m425-mq94-257g](./ghsa-m425-mq94-257g.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: CoreDNS | [7.5](https://github.com/advisories/GHSA-m425-mq94-257g) | :mag: Ongoing | +| [CVE-2023-45142](./cve-2023-45142.md) | 10/12/23 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-45142) | :mag: Ongoing | +| [CVE-2023-0464](./cve-2023-0464.md) | 3/22/23 | 6/21/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: OpenSSL | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-0464) | :mag: Ongoing | +| [CVE-2023-39325](./cve-2023-39325.md) | 10/11/23 | 4/28/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: Go project | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-39325) | :mag: Ongoing | +| [CVE-2023-47108](./cve-2023-47108.md) | 11/20/23 | 11/20/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-47108) | :mag: Ongoing | | [CVE-2023-44487](./cve-2023-44487.md) | 10/10/23 | 6/27/24 | 4.4.11 & 4.4.14 | Third-party component: CAPI | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-44487) | :mag: Ongoing | | [CVE-2022-25883](./cve-2022-25883.md) | 6/21/23 | 11/6/24 | 4.4.11 | Third-party component: CAPI | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-25883) | :mag: Ongoing | | [CVE-2015-8855](./cve-2015-8855.md) | 1/23/17 | 1/26/12 | 4.4.11 | Third-party component: CAPI | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2015-8855) | :mag: Ongoing | -| [CVE-2019-12900](./cve-2019-12900.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: BZ2 | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-12900) | :mag: Ongoing | -| [CVE-2023-37920](./cve-2023-37920.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Certifi | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2023-37920) | :mag: Ongoing | -| [CVE-2019-1010022](./cve-2019-1010022.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: GNU Libc | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-1010022) | :mag: Ongoing | +| [CVE-2019-12900](./cve-2019-12900.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: BZ2 | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-12900) | :mag: Ongoing | +| [CVE-2023-37920](./cve-2023-37920.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Certifi | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2023-37920) | :mag: Ongoing | +| [CVE-2019-1010022](./cve-2019-1010022.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: GNU Libc | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-1010022) | :mag: Ongoing | | [CVE-2016-1585](./cve-2016-1585.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: Ubuntu | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2016-1585) | :mag: Ongoing | -| [CVE-2018-20839](./cve-2018-20839.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2018-20839) | :mag: Ongoing | -| [CVE-2024-38428](./cve-2024-38428.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-38428) | :mag: Ongoing | -| [CVE-2021-42694](./cve-2021-42694.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [8.3](https://nvd.nist.gov/vuln/detail/CVE-2021-42694) | :mag: Ongoing | -| [CVE-2021-39537](./cve-2021-39537.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [8.8](https://nvd.nist.gov/vuln/detail/CVE-2021-39537) | :mag: Ongoing | +| [CVE-2018-20839](./cve-2018-20839.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2018-20839) | :mag: Ongoing | +| [CVE-2024-38428](./cve-2024-38428.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-38428) | :mag: Ongoing | +| [CVE-2021-42694](./cve-2021-42694.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [8.3](https://nvd.nist.gov/vuln/detail/CVE-2021-42694) | :mag: Ongoing | +| [CVE-2021-39537](./cve-2021-39537.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [8.8](https://nvd.nist.gov/vuln/detail/CVE-2021-39537) | :mag: Ongoing | | [CVE-2019-9923](./cve-2019-9923.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9923) | :mag: Ongoing | -| [CVE-2020-36325](./cve-2020-36325.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Jansson | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2020-36325) | :mag: Ongoing | +| [CVE-2020-36325](./cve-2020-36325.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Jansson | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2020-36325) | :mag: Ongoing | | [CVE-2005-2541](./cve-2005-2541.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [10.0](https://nvd.nist.gov/vuln/detail/CVE-2005-2541) | :mag: Ongoing | | [CVE-2019-9937](./cve-2019-9937.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9937) | :mag: Ongoing | | [CVE-2019-9936](./cve-2019-9936.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9936) | :mag: Ongoing | | [CVE-2019-19244](./cve-2019-19244.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-19244) | :mag: Ongoing | -| [CVE-2016-20013](./cve-2016-20013.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2016-20013) | :mag: Ongoing | -| [CVE-2022-0391](./cve-2022-0391.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-0391) | :mag: Ongoing | +| [CVE-2016-20013](./cve-2016-20013.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2016-20013) | :mag: Ongoing | +| [CVE-2022-0391](./cve-2022-0391.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-0391) | :mag: Ongoing | | [CVE-2021-3737](./cve-2021-3737.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2021-3737) | :mag: Ongoing | | [CVE-2019-9674](./cve-2019-9674.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9674) | :mag: Ongoing | -| [CVE-2023-26604](./cve-2023-26604.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Ubuntu | [7.8](https://nvd.nist.gov/vuln/detail/CVE-2023-26604) | :mag: Ongoing | +| [CVE-2023-26604](./cve-2023-26604.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Ubuntu | [7.8](https://nvd.nist.gov/vuln/detail/CVE-2023-26604) | :mag: Ongoing | | [CVE-2015-20107](./cve-2015-20107.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.6](https://nvd.nist.gov/vuln/detail/CVE-2015-20107) | :mag: Ongoing | -| [CVE-2017-11164](./cve-2017-11164.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2017-11164) | :mag: Ongoing | +| [CVE-2017-11164](./cve-2017-11164.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2017-11164) | :mag: Ongoing | | [CVE-2018-20225](./cve-2018-20225.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.8](https://nvd.nist.gov/vuln/detail/CVE-2018-20225) | :mag: Ongoing | -| [CVE-2022-41409](./cve-2022-41409.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41409) | :mag: Ongoing | +| [CVE-2022-41409](./cve-2022-41409.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41409) | :mag: Ongoing | | [CVE-2019-17543](./cve-2019-17543.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [8.1](https://nvd.nist.gov/vuln/detail/CVE-2019-17543) | :mag: Ongoing | -| [CVE-2022-4899](./cve-2022-4899.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-4899) | :mag: Ongoing | -| [CVE-2018-20657](./cve-2018-20657.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20657) | :mag: Ongoing | +| [CVE-2022-4899](./cve-2022-4899.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-4899) | :mag: Ongoing | +| [CVE-2018-20657](./cve-2018-20657.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20657) | :mag: Ongoing | | [CVE-2023-27534](./cve-2023-27534.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [8.8](https://nvd.nist.gov/vuln/detail/CVE-2023-27534) | :mag: Ongoing | | [CVE-2023-32636](./cve-2023-32636.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-32636) | :mag: Ongoing | | [CVE-2023-29499](./cve-2023-29499.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-29499) | :mag: Ongoing | @@ -78,28 +78,28 @@ Click on the CVE ID to view the full details of the vulnerability. | [CVE-2023-4156](./cve-2023-4156.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.1](https://nvd.nist.gov/vuln/detail/CVE-2023-4156) | :mag: Ongoing | | [CVE-2022-23990](./cve-2022-23990.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-23990) | :mag: Ongoing | | [CVE-2020-35512](./cve-2020-35512.md) | 08/16/24 | 08/16/24 | 4.4.14 | Third-party component: MongoDB | [7.8](https://nvd.nist.gov/vuln/detail/CVE-2020-35512) | :mag: Ongoing | -| [CVE-2012-2663](./cve-2012-2663.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: iPtables | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2012-2663) | :mag: Ongoing | -| [CVE-2019-9192](./cve-2019-9192.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9192) | :mag: Ongoing | -| [CVE-2018-20796](./cve-2018-20796.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20796) | :mag: Ongoing | -| [GHSA-74fp-r6jw-h4mp](./ghsa-74fp-r6jw-h4mp.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: Kubernetes API | [7.5](https://github.com/advisories/GHSA-74fp-r6jw-h4mp) | :mag: Ongoing | +| [CVE-2012-2663](./cve-2012-2663.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: iPtables | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2012-2663) | :mag: Ongoing | +| [CVE-2019-9192](./cve-2019-9192.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9192) | :mag: Ongoing | +| [CVE-2018-20796](./cve-2018-20796.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20796) | :mag: Ongoing | +| [GHSA-74fp-r6jw-h4mp](./ghsa-74fp-r6jw-h4mp.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: Kubernetes API | [7.5](https://github.com/advisories/GHSA-74fp-r6jw-h4mp) | :mag: Ongoing | | [CVE-2024-35325](./cve-2024-35325.md) | 08/27/24 | 08/30/24 | 4.4.14 | Third-party component: Libyaml | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-35325) | :white_check_mark: Resolved | | [CVE-2024-6197](./cve-2024-6197.md) | 08/27/24 | 08/30/24 | 4.4.14 | Third-party component: Libcurl | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-6197) | :mag: Ongoing | -| [CVE-2024-37371](./cve-2024-37371.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.17 | Third-party component: MIT Kerberos | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-37371) | :mag: Ongoing | -| [CVE-2024-37370](./cve-2024-37370.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.17 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-37370) | :mag: Ongoing | -| [CVE-2021-46848](./cve-2021-46848.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: GNU Libtasn1 | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2021-46848) | :mag: Ongoing | -| [CVE-2024-7592](./cve-2024-7592.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: CPython | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-7592) | :mag: Ongoing | -| [CVE-2024-1737](./cve-2024-1737.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1737) | :mag: Ongoing | -| [CVE-2024-0760](./cve-2024-0760.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-0760) | :mag: Ongoing | -| [CVE-2024-1975](./cve-2024-1975.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1975) | :mag: Ongoing | -| [CVE-2024-45490](./cve-2024-45490.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45490) | :mag: Ongoing | -| [CVE-2024-45491](./cve-2024-45491.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45491) | :mag: Ongoing | -| [CVE-2024-45492](./cve-2024-45492.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45492) | :mag: Ongoing | -| [CVE-2024-6232](./cve-2024-6232.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-6232) | :mag: Ongoing | -| [CVE-2024-3651](./cve-2024-3651.md) | 9/13/24 | 9/13/24 | 4.4.17 | Third-party component: kjd | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-3651) | :mag: Ongoing | -| [CVE-2023-24329](./cve-2023-24329.md) | 9/13/24 | 9/13/24 | 4.4.17 | Third-party component: Python | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-24329) | :mag: Ongoing | -| [CVE-2022-45061](./cve-2022-45061.md) | 9/13/24 | 9/13/24 | 4.4.17 | Third-party component: Python | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-45061) | :mag: Ongoing | -| [CVE-2022-48560](./cve-2022-48560.md) | 9/13/24 | 9/13/24 | 4.4.17 | Third-party component: Python | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-48560) | :mag: Ongoing | -| [CVE-2022-48565](./cve-2022-48565.md) | 9/13/24 | 9/13/24 | 4.4.17 | Third-party component: Python | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2022-48565) | :mag: Ongoing | +| [CVE-2024-37371](./cve-2024-37371.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.18 | Third-party component: MIT Kerberos | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-37371) | :mag: Ongoing | +| [CVE-2024-37370](./cve-2024-37370.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.18 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-37370) | :mag: Ongoing | +| [CVE-2021-46848](./cve-2021-46848.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: GNU Libtasn1 | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2021-46848) | :mag: Ongoing | +| [CVE-2024-7592](./cve-2024-7592.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: CPython | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-7592) | :mag: Ongoing | +| [CVE-2024-1737](./cve-2024-1737.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1737) | :mag: Ongoing | +| [CVE-2024-0760](./cve-2024-0760.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-0760) | :mag: Ongoing | +| [CVE-2024-1975](./cve-2024-1975.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1975) | :mag: Ongoing | +| [CVE-2024-45490](./cve-2024-45490.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45490) | :mag: Ongoing | +| [CVE-2024-45491](./cve-2024-45491.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45491) | :mag: Ongoing | +| [CVE-2024-45492](./cve-2024-45492.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45492) | :mag: Ongoing | +| [CVE-2024-6232](./cve-2024-6232.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-6232) | :mag: Ongoing | +| [CVE-2024-3651](./cve-2024-3651.md) | 9/13/24 | 9/13/24 | 4.4.18 | Third-party component: kjd | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-3651) | :mag: Ongoing | +| [CVE-2023-24329](./cve-2023-24329.md) | 9/13/24 | 9/13/24 | 4.4.18 | Third-party component: Python | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-24329) | :mag: Ongoing | +| [CVE-2022-45061](./cve-2022-45061.md) | 9/13/24 | 9/13/24 | 4.4.18 | Third-party component: Python | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-45061) | :mag: Ongoing | +| [CVE-2022-48560](./cve-2022-48560.md) | 9/13/24 | 9/13/24 | 4.4.18 | Third-party component: Python | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-48560) | :mag: Ongoing | +| [CVE-2022-48565](./cve-2022-48565.md) | 9/13/24 | 9/13/24 | 4.4.18 | Third-party component: Python | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2022-48565) | :mag: Ongoing | @@ -108,44 +108,44 @@ Click on the CVE ID to view the full details of the vulnerability. | CVE ID | Initial Pub Date | Modified Date | Product Version | Vulnerability Type | CVSS Severity | Status | | ----------------------------------------------- | ---------------- | ------------- | ------------------------ | --------------------------------------- | -------------------------------------------------------- | ------------- | | [CVE-2023-49569](./cve-2023-49569.md) | 9/6/24 | 9/6/24 | 4.4.15 | Third-party component: Bitdefender | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2023-49569) | :mag: Ongoing | -| [CVE-2024-37371](./cve-2024-37371.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.17 | Third-party component: MIT Kerberos | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-37371) | :mag: Ongoing | -| [CVE-2019-1010022](./cve-2019-1010022.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: GNU Libc | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-1010022) | :mag: Ongoing | -| [CVE-2024-45490](./cve-2024-45490.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45490) | :mag: Ongoing | -| [CVE-2019-12900](./cve-2019-12900.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: BZ2 | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-12900) | :mag: Ongoing | -| [CVE-2021-46848](./cve-2021-46848.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: GNU Libtasn1 | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2021-46848) | :mag: Ongoing | +| [CVE-2024-37371](./cve-2024-37371.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.18 | Third-party component: MIT Kerberos | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-37371) | :mag: Ongoing | +| [CVE-2019-1010022](./cve-2019-1010022.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: GNU Libc | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-1010022) | :mag: Ongoing | +| [CVE-2024-45490](./cve-2024-45490.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45490) | :mag: Ongoing | +| [CVE-2019-12900](./cve-2019-12900.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: BZ2 | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2019-12900) | :mag: Ongoing | +| [CVE-2021-46848](./cve-2021-46848.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: GNU Libtasn1 | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2021-46848) | :mag: Ongoing | | [CVE-2024-24790](./cve-2024-24790.md) | 8/6/24 | 8/6/24 | 4.4.11 & 4.4.14 | Third-party component: Go Project | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-24790) | :mag: Ongoing | -| [CVE-2018-20839](./cve-2018-20839.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2018-20839) | :mag: Ongoing | -| [CVE-2023-37920](./cve-2023-37920.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Certifi | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2023-37920) | :mag: Ongoing | -| [CVE-2024-45491](./cve-2024-45491.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45491) | :mag: Ongoing | -| [CVE-2024-45492](./cve-2024-45492.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45492) | :mag: Ongoing | -| [CVE-2024-38428](./cve-2024-38428.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-38428) | :mag: Ongoing | -| [CVE-2024-6232](./cve-2024-6232.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-6232) | :mag: Ongoing | -| [CVE-2020-36325](./cve-2020-36325.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Jansson | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2020-36325) | :mag: Ongoing | -| [CVE-2019-9192](./cve-2019-9192.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9192) | :mag: Ongoing | -| [CVE-2018-20796](./cve-2018-20796.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20796) | :mag: Ongoing | -| [CVE-2012-2663](./cve-2012-2663.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: iPtables | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2012-2663) | :mag: Ongoing | -| [CVE-2023-47108](./cve-2023-47108.md) | 11/20/23 | 11/20/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-47108) | :mag: Ongoing | -| [CVE-2023-45142](./cve-2023-45142.md) | 10/12/23 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-45142) | :mag: Ongoing | -| [CVE-2022-41409](./cve-2022-41409.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41409) | :mag: Ongoing | -| [CVE-2017-11164](./cve-2017-11164.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2017-11164) | :mag: Ongoing | -| [GHSA-m425-mq94-257g](./ghsa-m425-mq94-257g.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: CoreDNS | [7.5](https://github.com/advisories/GHSA-m425-mq94-257g) | :mag: Ongoing | -| [CVE-2022-4899](./cve-2022-4899.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-4899) | :mag: Ongoing | -| [CVE-2022-41723](./cve-2022-41723.md) | 2/28/23 | 11/25/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: CoreDNS | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41723) | :mag: Ongoing | -| [CVE-2023-0464](./cve-2023-0464.md) | 3/22/23 | 6/21/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: OpenSSL | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-0464) | :mag: Ongoing | -| [CVE-2021-39537](./cve-2021-39537.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [8.8](https://nvd.nist.gov/vuln/detail/CVE-2021-39537) | :mag: Ongoing | -| [CVE-2018-20657](./cve-2018-20657.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20657) | :mag: Ongoing | -| [CVE-2021-42694](./cve-2021-42694.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: MongoDB | [8.3](https://nvd.nist.gov/vuln/detail/CVE-2021-42694) | :mag: Ongoing | -| [GHSA-74fp-r6jw-h4mp](./ghsa-74fp-r6jw-h4mp.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: Kubernetes API | [7.5](https://github.com/advisories/GHSA-74fp-r6jw-h4mp) | :mag: Ongoing | +| [CVE-2018-20839](./cve-2018-20839.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2018-20839) | :mag: Ongoing | +| [CVE-2023-37920](./cve-2023-37920.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Certifi | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2023-37920) | :mag: Ongoing | +| [CVE-2024-45491](./cve-2024-45491.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45491) | :mag: Ongoing | +| [CVE-2024-45492](./cve-2024-45492.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: Libexpat | [9.8](https://nvd.nist.gov/vuln/detail/CVE-2024-45492) | :mag: Ongoing | +| [CVE-2024-38428](./cve-2024-38428.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [9.1](https://nvd.nist.gov/vuln/detail/CVE-2024-38428) | :mag: Ongoing | +| [CVE-2024-6232](./cve-2024-6232.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-6232) | :mag: Ongoing | +| [CVE-2020-36325](./cve-2020-36325.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Jansson | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2020-36325) | :mag: Ongoing | +| [CVE-2019-9192](./cve-2019-9192.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2019-9192) | :mag: Ongoing | +| [CVE-2018-20796](./cve-2018-20796.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: GNU C Library | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20796) | :mag: Ongoing | +| [CVE-2012-2663](./cve-2012-2663.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: iPtables | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2012-2663) | :mag: Ongoing | +| [CVE-2023-47108](./cve-2023-47108.md) | 11/20/23 | 11/20/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-47108) | :mag: Ongoing | +| [CVE-2023-45142](./cve-2023-45142.md) | 10/12/23 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: OpenTelemetry-Go | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-45142) | :mag: Ongoing | +| [CVE-2022-41409](./cve-2022-41409.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41409) | :mag: Ongoing | +| [CVE-2017-11164](./cve-2017-11164.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2017-11164) | :mag: Ongoing | +| [GHSA-m425-mq94-257g](./ghsa-m425-mq94-257g.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: CoreDNS | [7.5](https://github.com/advisories/GHSA-m425-mq94-257g) | :mag: Ongoing | +| [CVE-2022-4899](./cve-2022-4899.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-4899) | :mag: Ongoing | +| [CVE-2022-41723](./cve-2022-41723.md) | 2/28/23 | 11/25/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: CoreDNS | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2022-41723) | :mag: Ongoing | +| [CVE-2023-0464](./cve-2023-0464.md) | 3/22/23 | 6/21/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: OpenSSL | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-0464) | :mag: Ongoing | +| [CVE-2021-39537](./cve-2021-39537.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [8.8](https://nvd.nist.gov/vuln/detail/CVE-2021-39537) | :mag: Ongoing | +| [CVE-2018-20657](./cve-2018-20657.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2018-20657) | :mag: Ongoing | +| [CVE-2021-42694](./cve-2021-42694.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: MongoDB | [8.3](https://nvd.nist.gov/vuln/detail/CVE-2021-42694) | :mag: Ongoing | +| [GHSA-74fp-r6jw-h4mp](./ghsa-74fp-r6jw-h4mp.md) | 10/25/23 | 10/25/23 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: Kubernetes API | [7.5](https://github.com/advisories/GHSA-74fp-r6jw-h4mp) | :mag: Ongoing | | [CVE-2024-6197](./cve-2024-6197.md) | 08/27/24 | 08/30/24 | 4.4.14 | Third-party component: Libcurl | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-6197) | :mag: Ongoing | -| [CVE-2023-26604](./cve-2023-26604.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Ubuntu | [7.8](https://nvd.nist.gov/vuln/detail/CVE-2023-26604) | :mag: Ongoing | -| [CVE-2023-39325](./cve-2023-39325.md) | 10/11/23 | 4/28/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: Go project | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-39325) | :mag: Ongoing | -| [CVE-2024-37370](./cve-2024-37370.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.17 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-37370) | :mag: Ongoing | -| [CVE-2016-20013](./cve-2016-20013.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.17 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2016-20013) | :mag: Ongoing | -| [CVE-2024-21626](./cve-2024-21626.md) | 1/3/24 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.17 | Third-party component: kube-proxy | [8.6](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) | :mag: Ongoing | -| [CVE-2024-7592](./cve-2024-7592.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: CPython | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-7592) | :mag: Ongoing | -| [CVE-2024-0760](./cve-2024-0760.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-0760) | :mag: Ongoing | -| [CVE-2024-1737](./cve-2024-1737.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1737) | :mag: Ongoing | -| [CVE-2024-1975](./cve-2024-1975.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.17 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1975) | :mag: Ongoing | +| [CVE-2023-26604](./cve-2023-26604.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Ubuntu | [7.8](https://nvd.nist.gov/vuln/detail/CVE-2023-26604) | :mag: Ongoing | +| [CVE-2023-39325](./cve-2023-39325.md) | 10/11/23 | 4/28/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: Go project | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2023-39325) | :mag: Ongoing | +| [CVE-2024-37370](./cve-2024-37370.md) | 08/30/24 | 08/30/24 | 4.4.14 & 4.4.18 | Third-party component: MIT Kerberos | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-37370) | :mag: Ongoing | +| [CVE-2016-20013](./cve-2016-20013.md) | 08/16/24 | 08/16/24 | 4.4.14 & 4.4.18 | Third-party component: Ubuntu | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2016-20013) | :mag: Ongoing | +| [CVE-2024-21626](./cve-2024-21626.md) | 1/3/24 | 2/18/24 | 4.4.11 & 4.4.14 & 4.4.18 | Third-party component: kube-proxy | [8.6](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) | :mag: Ongoing | +| [CVE-2024-7592](./cve-2024-7592.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: CPython | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-7592) | :mag: Ongoing | +| [CVE-2024-0760](./cve-2024-0760.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-0760) | :mag: Ongoing | +| [CVE-2024-1737](./cve-2024-1737.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1737) | :mag: Ongoing | +| [CVE-2024-1975](./cve-2024-1975.md) | 9/5/24 | 9/5/24 | 4.4.14 & 4.4.18 | Third-party component: ISC | [7.5](https://nvd.nist.gov/vuln/detail/CVE-2024-1975) | :mag: Ongoing | diff --git a/docs/docs-content/spectro-downloads.md b/docs/docs-content/spectro-downloads.md index f770b3437f..fe5424d68f 100644 --- a/docs/docs-content/spectro-downloads.md +++ b/docs/docs-content/spectro-downloads.md @@ -25,15 +25,17 @@ the [Palette CLI](./automation/palette-cli/palette-cli.md) document for installa | Version | Operating System | Checksum (SHA256) | | ------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | +| 4.4.8 | [Linux-amd64](https://software.spectrocloud.com/palette-cli/v4.4.8/linux/cli/palette) | `7fb2752efa92d0cb98230b6154c234600f8a6bf9521fe4cb1a2c862154220591` | | 4.4.6 | [Linux-amd64](https://software.spectrocloud.com/palette-cli/v4.4.6/linux/cli/palette) | `36b756afaa8349ff8f44085cd4508dfe990d22f3befeea980a65c4028a584b3f` | | 4.4.5 | [Linux-amd64](https://software.spectrocloud.com/palette-cli/v4.4.5/linux/cli/palette) | `d177e996844f72305d2d952e0ecf5893eb5b1a32442543454cb9720e9fa9b935` | ## Palette Edge CLI -| Version | Operating System | Checksum (SHA256) | -| ------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| 4.4.8 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.8/cli/linux/palette-edge) | `380df5d7037e962c2984070b54ce005f849158819545a2f25f24b9d2f5dd6cca1` | -| 4.4.7 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.7/cli/linux/palette-edge) | `fb961fd91cfb2b8235f467dfbc7ee06efe0d94184a42f2f3b9a0c8534ad7b797` | -| 4.4.6 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.6/cli/linux/palette-edge) | `6bf798ce0fc1910cfb0ad3b5e2d949d46fa7d1948372120cc82ae323b14898aa` | -| 4.4.4 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.4/cli/linux/palette-edge) | `3dae63e503251ff0d8a85c596cddf9c45ac29ca341d0f4d47756c865121fcdb9` | -| 4.4.2 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.2/cli/linux/palette-edge) | `86d2f9239d2b8517dc6d750631a3a328136a5d49a8ec042899879e9bd25a396e` | +| Version | Operating System | Checksum (SHA256) | +| ------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | +| 4.4.12 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.12/cli/linux/palette-edge) | `202b759e96062d81d9d572717d59a435ce9e8f7865c2abb16584a1c62d5767cc` | +| 4.4.8 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.8/cli/linux/palette-edge) | `380df5d7037e962c2984070b54ce005f849158819545a2f25f24b9d2f5dd6cca1` | +| 4.4.7 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.7/cli/linux/palette-edge) | `fb961fd91cfb2b8235f467dfbc7ee06efe0d94184a42f2f3b9a0c8534ad7b797` | +| 4.4.6 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.6/cli/linux/palette-edge) | `6bf798ce0fc1910cfb0ad3b5e2d949d46fa7d1948372120cc82ae323b14898aa` | +| 4.4.4 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.4/cli/linux/palette-edge) | `3dae63e503251ff0d8a85c596cddf9c45ac29ca341d0f4d47756c865121fcdb9` | +| 4.4.2 | [Linux-amd64](https://software.spectrocloud.com/stylus/v4.4.2/cli/linux/palette-edge) | `86d2f9239d2b8517dc6d750631a3a328136a5d49a8ec042899879e9bd25a396e` | diff --git a/docs/docs-content/vertex/install-palette-vertex/airgap/supplemental-packs.md b/docs/docs-content/vertex/install-palette-vertex/airgap/supplemental-packs.md index 4e427e50c5..b83157016e 100644 --- a/docs/docs-content/vertex/install-palette-vertex/airgap/supplemental-packs.md +++ b/docs/docs-content/vertex/install-palette-vertex/airgap/supplemental-packs.md @@ -13,65 +13,55 @@ Review the following table to determine which pack binaries you need to download | **File Name** | **Download URL** | | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `airgap-pack-cni-azure-1.4.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-cni-azure-1.4.0.bin | -| `airgap-pack-custom_os-1.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-custom_os-1.0.0.bin | -| `airgap-pack-kubernetes-custom-1.0.0.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-kubernetes-custom-1.0.0.bin | -| `airgap-pack-nutanix-csi-2.6.6.bin` | https://software-private.spectrocloud.com/airgap/packs/airgap-pack-nutanix-csi-2.6.6.bin | -| `airgap-vertex-pack-cni-calico-3.24.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-3.24.1.bin | -| `airgap-vertex-pack-cni-calico-3.25.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-3.25.1.bin | -| `airgap-vertex-pack-cni-calico-3.26.3.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-3.26.3.bin | -| `airgap-vertex-pack-cni-calico-azure-fips-3.25.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-azure-fips-3.25.1.bin | -| `airgap-vertex-pack-csi-azure-fips-1.28.3.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-azure-fips-1.28.3.bin | -| `airgap-vertex-pack-csi-longhorn-fips-1.4.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-longhorn-fips-1.4.1.bin | -| `airgap-vertex-pack-csi-vsphere-csi-3.0.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-vsphere-csi-3.0.0.bin | -| `airgap-vertex-pack-edge-k3s-1.27.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k3s-1.27.2.bin | -| `airgap-vertex-pack-edge-k8s-1.24.13.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.24.13.bin | -| `airgap-vertex-pack-edge-k8s-1.25.9.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.25.9.bin | -| `airgap-vertex-pack-edge-k8s-1.26.12.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.26.12.bin | -| `airgap-vertex-pack-edge-k8s-1.26.4.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.26.4.bin | -| `airgap-vertex-pack-edge-k8s-1.27.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.27.2.bin | -| `airgap-vertex-pack-edge-k8s-1.27.9.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.27.9.bin | -| `airgap-vertex-pack-edge-k8s-1.28.5.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.28.5.bin | -| `airgap-vertex-pack-edge-native-byoi-1.0.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-native-byoi-1.0.0.bin | -| `airgap-vertex-pack-edge-rke2-1.24.6.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.24.6.bin | -| `airgap-vertex-pack-edge-rke2-1.25.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.25.0.bin | -| `airgap-vertex-pack-edge-rke2-1.25.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.25.2.bin | -| `airgap-vertex-pack-edge-rke2-1.26.12.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.26.12.bin | -| `airgap-vertex-pack-edge-rke2-1.26.14.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.26.14.bin | -| `airgap-vertex-pack-edge-rke2-1.27.11.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.27.11.bin | -| `airgap-vertex-pack-edge-rke2-1.27.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.27.2.bin | -| `airgap-vertex-pack-edge-rke2-1.28.7.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.28.7.bin | -| `airgap-vertex-pack-edge-rke2-1.29.3.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.29.3.bin | -| `airgap-vertex-pack-generic-byoi-1.0.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-generic-byoi-1.0.0.bin | -| `airgap-vertex-pack-kubernetes-1.25.10.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.25.10.bin | -| `airgap-vertex-pack-kubernetes-1.25.9.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.25.9.bin | -| `airgap-vertex-pack-kubernetes-1.26.10.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.26.10.bin | -| `airgap-vertex-pack-kubernetes-1.26.12.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.26.12.bin | -| `airgap-vertex-pack-kubernetes-1.26.15.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.26.15.bin | -| `airgap-vertex-pack-kubernetes-1.26.4.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.26.4.bin | -| `airgap-vertex-pack-kubernetes-1.26.5.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.26.5.bin | -| `airgap-vertex-pack-kubernetes-1.27.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.1.bin | -| `airgap-vertex-pack-kubernetes-1.27.11.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.11.bin | -| `airgap-vertex-pack-kubernetes-1.27.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.2.bin | -| `airgap-vertex-pack-kubernetes-1.27.7.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.7.bin | -| `airgap-vertex-pack-kubernetes-1.27.9.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.9.bin | -| `airgap-vertex-pack-kubernetes-1.28.3.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.28.3.bin | -| `airgap-vertex-pack-kubernetes-1.28.5.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.28.5.bin | -| `airgap-vertex-pack-kubernetes-aks-1.27.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-aks-1.27.bin | -| `airgap-vertex-pack-kubernetes-aks-1.28.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-aks-1.28.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.25.10-rke2r1-build20230518.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.25.10-rke2r1-build20230518.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.26.11-rke2r1-build20231115.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.26.11-rke2r1-build20231115.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.26.12-rke2r1-build20231220.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.26.12-rke2r1-build20231220.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.26.5-rke2r1-build20230518.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.26.5-rke2r1-build20230518.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.27.8-rke2r1-build20231115.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.27.8-rke2r1-build20231115.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.27.9-rke2r1-build20231220.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.27.9-rke2r1-build20231220.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.28.4-rke2r1-build20231115.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.28.4-rke2r1-build20231115.bin | -| `airgap-vertex-pack-kubernetes-rke2-1.28.5-rke2r1-build20231220.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.28.5-rke2r1-build20231220.bin | -| `airgap-vertex-pack-spectro-proxy-1.3.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-spectro-proxy-1.3.0.bin | -| `airgap-thirdparty-4.3.5.bin` | https://software-private.spectrocloud.com/airgap/thirdparty/airgap-thirdparty-4.3.5.bin | -| `airgap-vertex-pack-ubuntu-aks-22.04.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-ubuntu-aks-22.04.bin | -| `airgap-vertex-pack-ubuntu-azure-20.04.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-ubuntu-azure-20.04.bin | -| `airgap-vertex-pack-ubuntu-vsphere-20.04.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-ubuntu-vsphere-20.04.bin | +| `airgap-vertex-pack-cni-calico-3.27.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-3.27.2.bin | +| `airgap-vertex-pack-cni-calico-3.28.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-3.28.0.bin | +| `airgap-vertex-pack-cni-calico-3.28.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-3.28.1.bin | +| `airgap-vertex-pack-cni-calico-azure-fips-3.28.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-calico-azure-fips-3.28.1.bin | +| `airgap-vertex-pack-cni-flannel-fips-0.25.5.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-cni-flannel-fips-0.25.5.bin | +| `airgap-vertex-pack-csi-longhorn-addon-fips-1.6.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-longhorn-addon-fips-1.6.2.bin | +| `airgap-vertex-pack-csi-longhorn-fips-1.6.2.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-longhorn-fips-1.6.2.bin | +| `airgap-vertex-pack-csi-vsphere-csi-3.2.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-vsphere-csi-3.2.0.bin | +| `airgap-vertex-pack-csi-vsphere-csi-3.3.1.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-csi-vsphere-csi-3.3.1.bin | +| `airgap-vertex-pack-edge-k8s-1.29.5.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.29.5.bin | +| `airgap-vertex-pack-edge-k8s-1.29.0.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.29.0.bin | +| `airgap-vertex-pack-edge-k8s-1.28.10.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.28.10.bin | +| `airgap-vertex-pack-edge-k8s-1.27.14.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.27.14.bin | +| `airgap-vertex-pack-edge-k8s-1.27.15.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.27.15.bin | +| `airgap-vertex-pack-edge-k8s-1.29.6.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.29.6.bin | +| `airgap-vertex-pack-edge-k8s-1.28.11.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.28.11.bin | +| `airgap-vertex-pack-edge-k8s-1.29.7.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.29.7.bin | +| `airgap-vertex-pack-edge-k8s-1.28.12.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.28.12.bin | +| `airgap-vertex-pack-edge-k8s-1.27.16.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.27.16.bin | +| `airgap-vertex-pack-edge-k8s-1.28.13.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.28.13.bin | +| `airgap-vertex-pack-edge-k8s-1.29.8.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.29.8.bin | +| `airgap-vertex-pack-edge-k8s-1.30.4.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-k8s-1.30.4.bin | +| `airgap-vertex-pack-edge-rke2-1.27.14.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.27.14.bin | +| `airgap-vertex-pack-edge-rke2-1.28.10.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.28.10.bin | +| `airgap-vertex-pack-edge-rke2-1.29.5.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.29.5.bin | +| `airgap-vertex-pack-edge-rke2-1.27.15.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.27.15.bin | +| `airgap-vertex-pack-edge-rke2-1.28.11.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.28.11.bin | +| `airgap-vertex-pack-edge-rke2-1.29.6.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.29.6.bin | +| `airgap-vertex-pack-edge-rke2-1.28.12.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.28.12.bin | +| `airgap-vertex-pack-edge-rke2-1.29.7.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.29.7.bin | +| `airgap-vertex-pack-edge-rke2-1.30.3.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-edge-rke2-1.30.3.bin | +| `airgap-vertex-pack-kubernetes-1.27.15.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.15.bin | +| `airgap-vertex-pack-kubernetes-1.28.11.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.28.11.bin | +| `airgap-vertex-pack-kubernetes-1.29.6.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.29.6.bin | +| `airgap-vertex-pack-kubernetes-1.29.7.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.29.7.bin | +| `airgap-vertex-pack-kubernetes-1.27.16.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.27.16.bin | +| `airgap-vertex-pack-kubernetes-1.28.12.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.28.12.bin | +| `airgap-vertex-pack-kubernetes-1.28.13.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.28.13.bin | +| `airgap-vertex-pack-kubernetes-1.29.8.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.29.8.bin | +| `airgap-vertex-pack-kubernetes-1.30.4.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-1.30.4.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.27.14-rke2r1-build20240515.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.27.14-rke2r1-build20240515.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.28.10-rke2r1-build20240514.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.28.10-rke2r1-build20240514.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.29.5-rke2r1-build20240515.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.29.5-rke2r1-build20240515.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.29.6-rke2r1-build20240619.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.29.6-rke2r1-build20240619.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.28.11-rke2r1-build20240619.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.28.11-rke2r1-build20240619.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.27.15-rke2r1-build20240619.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.27.15-rke2r1-build20240619.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.28.12-rke2r1-build20240717.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.28.12-rke2r1-build20240717.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.29.7-rke2r1-build20240717.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.29.7-rke2r1-build20240717.bin | +| `airgap-vertex-pack-kubernetes-rke2-1.30.3-rke2r1-build20240717.bin` | https://software-private.spectrocloud.com/airgap-vertex/packs/airgap-vertex-pack-kubernetes-rke2-1.30.3-rke2r1-build20240717.bin | ### Usage Instructions @@ -138,25 +128,27 @@ registry. The following table lists additional OVAs that may be required depending on the Kubernetes version and distribution you want to use for your workload clusters. -| **Kubernetes Version** | **OVA Name** | **Download URL** | -| ---------------------- | ------------------------------ | --------------------------------------------------------------------------------------------- | -| Kubernetes 1.25.9 | u-2004-0-k-1259-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-1259-fips.ova` | -| Kubernetes 1.25.10 | u-2004-0-k-12510-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-12510-fips.ova` | -| Kubernetes 1.26.4 | u-2004-0-k-1264-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-1264-fips.ova` | -| Kubernetes 1.26.5 | u-2004-0-k-1265-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-1265-fips.ova` | -| Kubernetes 1.26.10 | u-2004-0-k-12610-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-12610-fips.ova` | -| Kubernetes 1.26.12 | u-2004-0-k-12612-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-12612-fips.ova` | -| Kubernetes 1.27.1 | u-2004-0-k-1271-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-1271-fips.ova` | -| Kubernetes 1.27.2 | u-2004-0-k-1272-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-1272-fips.ova` | -| Kubernetes 1.28.3 | u-2004-0-k-1283-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-1283-fips.ova` | -| RKE2 1.25.10 | u-2004-0-k-rke2-1250-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-1250-fips.ova` | -| RKE2 1.26.5 | u-2004-0-k-rke2-1265-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-1265-fips.ova` | -| RKE2 1.26.11 | u-2004-0-k-rke2-12611-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-12611-fips.ova` | -| RKE2 1.26.12 | u-2004-0-k-rke2-12612-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-12612-fips.ova` | -| RKE2 1.27.8 | u-2004-0-k-rke2-1278-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-1278-fips.ova` | -| RKE2 1.27.9 | u-2004-0-k-rke2-1279-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-1279-fips.ova` | -| RKE2 1.28.4 | u-2004-0-k-rke2-1284-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-1284-fips.ova` | -| RKE2 1.28.5 | u-2004-0-k-rke2-1285-fips.ova | `https://vmwaregoldenimage-console.s3.us-east-2.amazonaws.com/u-2004-0-k-rke2-1285-fips.ova` | +| **Kubernetes Version** | **OVA Name** | **Download URL** | +| ---------------------- | ------------------------------ | ----------------------------------------------------------------------------------- | +| Kubernetes 1.28.9 | u-2004-0-k-1289-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1289-fips.ova` | +| Kubernetes 1.29.4 | u-2004-0-k-1294-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1294-fips.ova` | +| Kubernetes 1.27.13 | u-2004-0-k-12713-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-12713-fips.ova` | +| Kubernetes 1.27.11 | u-2004-0-k-rke2-12711-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-12711-fips.ova` | +| Kubernetes 1.29.4 | u-2004-0-k-rke2-1294-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-1294-fips.ova` | +| Kubernetes 1.28.9 | u-2004-0-k-rke2-1289-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-1289-fips.ova` | +| Kubernetes 1.27.13 | u-2004-0-k-rke2-12713-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-12713-fips.ova` | +| Kubernetes 1.28.10 | u-2004-0-k-rke2-12810-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-12810-fips.ova` | +| Kubernetes 1.27.14 | u-2004-0-k-rke2-12714-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-12714-fips.ova` | +| Kubernetes 1.29.5 | u-2004-0-k-rke2-1295-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-1295-fips.ova` | +| Kubernetes 1.27.15 | u-2004-0-k-12715-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-12715-fips.ova` | +| Kubernetes 1.28.11 | u-2004-0-k-12811-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-12811-fips.ova` | +| Kubernetes 1.29.6 | u-2004-0-k-1296-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1296-fips.ova` | +| Kubernetes 1.27.16 | u-2004-0-k-12716-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-12716-fips.ova` | +| Kubernetes 1.28.12 | u-2004-0-k-12812-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-12812-fips.ova` | +| Kubernetes 1.29.7 | u-2004-0-k-1297-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-1297-fips.ova` | +| Kubernetes 1.29.6 | u-2004-0-k-rke2-1296-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-1296-fips.ova` | +| Kubernetes 1.28.11 | u-2004-0-k-rke2-12811-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-12811-fips.ova` | +| Kubernetes 1.27.15 | u-2004-0-k-rke2-12715-fips.ova | `https://vmwaregoldenimage-console.s3.amazonaws.com/u-2004-0-k-rke2-12715-fips.ova` | ### Usage Instructions diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md index 7622e3793f..f4eafe741f 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md @@ -278,9 +278,9 @@ Use the following steps to install Palette VerteX. | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers, such as `pool.ntp.org`. | | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. | -16. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing - static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DDNS assigns IP addresses - using DNS. +16. Specify the IP pool configuration. The placement type can be Static or Dynamic Host Configuration Protocol (DHCP). + Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DHCP assigns IP + addresses using DNS. #### Static Placement Configuration diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md index cc51c62314..d85deec871 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md @@ -237,9 +237,9 @@ Use the following steps to install Palette VerteX. | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers, such as `pool.ntp.org`. | | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. | -16. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing - static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DDNS assigns IP addresses - using DNS. +16. Specify the IP pool configuration. The placement type can be Static or Dynamic Host Configuration Protocol (DHCP). + Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DHCP assigns IP + addresses using DNS. #### Static Placement Configuration diff --git a/docs/docs-content/vertex/upgrade/upgrade.md b/docs/docs-content/vertex/upgrade/upgrade.md index 446adcbbaf..2f20cf387d 100644 --- a/docs/docs-content/vertex/upgrade/upgrade.md +++ b/docs/docs-content/vertex/upgrade/upgrade.md @@ -33,6 +33,7 @@ latest minor version available. | **Source Version** | **Target Version** | **Support** | | :----------------: | :----------------: | :----------------: | +| 4.4.14 | 4.4.18 | :white_check_mark: | | 4.4.11 | 4.4.14 | :white_check_mark: | | 4.4.6 | 4.4.14 | :white_check_mark: | | 4.3.6 | 4.4.14 | :white_check_mark: | diff --git a/docs/docs-content/vm-management/architecture.md b/docs/docs-content/vm-management/architecture.md index bd04b1d96c..41b74c1d35 100644 --- a/docs/docs-content/vm-management/architecture.md +++ b/docs/docs-content/vm-management/architecture.md @@ -84,6 +84,33 @@ Palette VMO includes the following KubeVirt feature gates by default: For more information on KubeVirt feature gates, refer to the [KubeVirt Activating feature gates](https://kubevirt.io/user-guide/cluster_admin/activating_feature_gates/) guide. +## MAC Address Management + +Palette automatically assigns unique Media Access Control (MAC) addresses to VMs when you create them through the +Palette UI, API, or [Terraform](../automation/terraform/terraform.md). The MAC address always starts with a prefix that +is either `02`, `06`, `0A`, or `0E`. The remaining part of the MAC address is generated randomly. + +### Specify a MAC Address + +You can set a VM's MAC address by specifying a value in the VM's YAML configuration file under the `macAddress` field. + +:::danger + +If you choose to assign a custom MAC address to a VM, ensure that it is unique and not already in use by any other VM in +the cluster. Duplicate MAC addresses can cause network conflicts and connectivity issues. + +::: + +```yaml hideClipboard +spec: + template: + spec: + domain: + devices: + interfaces: + - macAddress: "REPLACE_WITH_MAC_ADDRESS" +``` + ## Next Steps Now that you understand the architecture behind Palette VMO, you can continue exploring it by reviewing our diff --git a/docs/docs-content/vm-management/create-manage-vm/advanced-topics/create-vm-template.md b/docs/docs-content/vm-management/create-manage-vm/advanced-topics/create-vm-template.md index 7bc00595e9..e9e425f588 100644 --- a/docs/docs-content/vm-management/create-manage-vm/advanced-topics/create-vm-template.md +++ b/docs/docs-content/vm-management/create-manage-vm/advanced-topics/create-vm-template.md @@ -35,68 +35,98 @@ Create a template by adding a YAML file as a manifest in an add-on profile. 8. Click **Finish Configuration**. -#### Example YAML for a VM template - -```yaml -apiVersion: spectrocloud.com/v1 -kind: VmTemplate -metadata: - labels: - app.kubernetes.io/name: fedora-36 - app.kubernetes.io/instance: fedora-36-instance - app.kubernetes.io/part-of: vmtemplate - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/created-by: vmtemplate - name: fedora-36 -spec: - description: This is Fedora 36 image - displayName: Fedora 36 - icon: "https://s3.amazonaws.com/manifests.spectrocloud.com/logos/fedora.webp" - running: false - template: - spec: - domain: - cpu: - cores: 1 - devices: - disks: - - name: containerdisk - disk: - bus: virtio - - name: cloudinitdisk - disk: - bus: virtio - interfaces: - - name: default - masquerade: {} - resources: - requests: - memory: 1Gi - cpu: 1 - limits: - memory: 2Gi - cpu: 2 - networks: - - name: default - pod: {} - volumes: - - name: containerdisk - containerDisk: - image: gcr.io/spectro-images-public/release/vm-dashboard/os/fedora-container-disk:36 - - name: cloudinitdisk - cloudInitNoCloud: - # user name is fedora - userData: | - #cloud-config - ssh_pwauth: True - chpasswd: { expire: False } - password: spectro - disable_root: false - packages: - qemu-guest-agent - runcmd: - - ["sudo", "systemctl", "enable", "--now", "qemu-guest-agent"] -``` + #### Example YAML for a VM template + + ```yaml + apiVersion: kubevirt.io/v1 + kind: VirtualMachine + metadata: + name: example + namespace: default + labels: + app.kubernetes.io/managed-by: Helm + kubevirt.io/vm: example + spec: + dataVolumeTemplates: + - metadata: + name: example-dv-u2204-sip + spec: + pvc: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 50Gi + source: + registry: + url: >- + docker://gcr.io/spectro-images-public/release/virtual-machine-orchestrator/os/ubuntu-container-disk:22.04 + running: false + template: + metadata: + annotations: + descheduler.alpha.kubernetes.io/evict: "true" + spec: + domain: + cpu: + cores: 8 + sockets: 1 + threads: 1 + devices: + disks: + - disk: + bus: virtio + name: datavolume-os + - disk: + bus: virtio + name: cloudinitdisk + interfaces: + - bridge: {} + model: virtio + name: default + macAddress: "06:AD:69:40:F0:94" + machine: + type: q35 + resources: + limits: {} + requests: {} + memory: + guest: 16Gi + networks: + - multus: + networkName: vlan-0 + name: default + volumes: + - dataVolume: + name: example-dv-u2204-sip + name: datavolume-os + - cloudInitNoCloud: + networkData: | + network: + version: 1 + config: + - type: physical + name: enp1s0 + subnets: + #- type: dhcp + - type: static + address: a.b.c.d/prefixlength + gateway: e.f.g.h + - type: nameserver + address: + - 8.8.8.8 + userData: | + #cloud-config + ssh_pwauth: True + chpasswd: { expire: False } + password: spectro + disable_root: false + runcmd: + - apt-get update + - apt-get install -y qemu-guest-agent + - systemctl start qemu-guest-agent + name: cloudinitdisk + ``` ## Validate diff --git a/docs/docs-content/vm-management/create-manage-vm/deploy-vm-from-template.md b/docs/docs-content/vm-management/create-manage-vm/deploy-vm-from-template.md index 1acb61afff..dd0b2f0cf0 100644 --- a/docs/docs-content/vm-management/create-manage-vm/deploy-vm-from-template.md +++ b/docs/docs-content/vm-management/create-manage-vm/deploy-vm-from-template.md @@ -55,6 +55,15 @@ These steps will help guide you to deploy a VM from an out-of-the-box VM templat 8. Give the VM a name and specify memory and CPUs. + :::info + + You can change the memory and CPU values after the VM is deployed. By default, the hotplug feature is enabled for + both [memory](https://kubevirt.io/user-guide/compute/memory_hotplug/#memory-hotplug-in-action) and + [CPU](https://kubevirt.io/user-guide/compute/cpu_hotplug/), allowing changes to be applied without rebooting the VM + through live migration. + + ::: + 9. Optionally, you can enable the checkbox to start the VM automatically after creation. 10. Click the **Next** button, which displays the YAML file. Tooltip help is available when you hover over lines in the diff --git a/docs/docs-content/vm-management/create-manage-vm/enable-cpu-hotplug.md b/docs/docs-content/vm-management/create-manage-vm/enable-cpu-hotplug.md index 10d3c78e65..6b9c5dc763 100644 --- a/docs/docs-content/vm-management/create-manage-vm/enable-cpu-hotplug.md +++ b/docs/docs-content/vm-management/create-manage-vm/enable-cpu-hotplug.md @@ -1,24 +1,60 @@ --- -sidebar_label: "Enable CPU Hotplug" -title: "Enable CPU Hotplug" -description: "Learn how to enable the CPU Hotplug feature in your VMs using Palette Virtual Machine Orchestrator." +sidebar_label: "Manage CPU and Memory" +title: "Manage CPU and Memory" +description: + "Learn how to manage the CPU and Memory Hotplug feature in your VMs using Palette Virtual Machine Orchestrator." sidebar_position: 50 tags: ["vmo", "cpu-hotplug"] --- -You can enable the [KubeVirt CPU Hotplug](https://kubevirt.io/user-guide/compute/cpu_hotplug/) feature in Palette, which -allows the Virtual Machine (VM) to add and remove virtual CPUs while the VM is running. +You can use the [KubeVirt CPU Hotplug](https://kubevirt.io/user-guide/compute/cpu_hotplug/) and +[KubeVirt Memory Hotplug](https://kubevirt.io/user-guide/compute/memory_hotplug/) feature in Palette, which allows the +Virtual Machine (VM) to add and remove virtual CPUs and increase or decrease memory while the VM is active. By default, +live migration is automatically enabled to apply the changes without rebooting the VM. ## Limitations -- CPU hotplug is not currently supported by the ARM64 architecture. -- The current CPU hotplug implementation requires the live migration of the VM workload. +- CPU and memory hotplug is not currently supported by the ARM64 architecture. +- The current [CPU](https://kubevirt.io/user-guide/compute/cpu_hotplug/#limitations) and + [memory](https://kubevirt.io/user-guide/compute/memory_hotplug/#limitations) hotplug implementation requires the live + migration of the VM workload. ## Prerequisites - A VM deployed and active in Palette. -## Enable CPU Hotplug +## Manage CPU and Memory + +Select the tab that corresponds to the method you want to use to enable CPU or memory hotplug in your VM. + + + + +1. Log in to [Palette](https://console.spectrocloud.com/). + +2. From the left **Main Menu**, select **Clusters**, and then select the cluster with the VM you want to update. + +3. Select the **Virtual Machines** tab, then select the necessary VM and open its **Details** tab. + + ![Palette with the Details tab displayed.](/vm-management_create-manage-vm_enable-cpu-hotplug_details.webp) + +4. Change the desired CPU sockets, CPU cores, or memory size. Toggle the **Run Live Migration** switch to enable the + changes through live migration. If you don't toggle the switch, the changes are applied next time the VM is + restarted. + + ![View of the Memory and CPU Change Box](/vm-management_create-manage-vm_enable-cpu-hotplug_flavor_box.webp) + + :::info + + Memory changes expose an additional **Save & Restart** button. This button allows you to save the changes and + immediately restart the VM to apply the changes. Otherwise, the changes are applied through live migration. + + ::: + +5. Select **Save**. + + + 1. Log in to [Palette](https://console.spectrocloud.com/). @@ -28,8 +64,8 @@ allows the Virtual Machine (VM) to add and remove virtual CPUs while the VM is r ![Palette with the VM YAML editor displayed.](/vm-management_create-manage-vm_enable-cpu-hotplug_vm-yaml-editor.webp) -4. In the VM YAML configuration editor, navigate to the VM object configuration and update the number of CPU sockets. - Consider the following example for reference. +4. In the VM YAML configuration editor, navigate to the VM object configuration and update the number of CPU sockets or + memory. Consider the following examples for reference. ```yaml spec: @@ -41,6 +77,16 @@ allows the Virtual Machine (VM) to add and remove virtual CPUs while the VM is r sockets: 5 ``` + ```yaml + spec: + template: + spec: + domain: + memory: + // highlight-next-line + guest: 2Gi + ``` + 5. In the bottom-left corner, select **Save**. Palette applies your updates. 6. To track the update process, in the YAML configuration editor, select **Reload** and monitor for a status update @@ -60,17 +106,52 @@ allows the Virtual Machine (VM) to add and remove virtual CPUs while the VM is r type: HotVCPUChange ``` + + + ## Validate + + + + +1. Log in to [Palette](https://console.spectrocloud.com/). + +2. From the left **Main Menu**, select **Clusters**, and then select the cluster with the VM you want to update. + +3. Select the **Virtual Machines** tab, then select the necessary VM and open its **Console** tab. + +4. Log in to the VM using the appropriate credentials specified in the YAML template. The provided templates contain the + default credentials for the VM in the `cloudInitNoCloud.userData` section. + +5. Verify that the VM has the expected number of CPUs or memory size. Use the following commands to verify the number of + CPUs, memory size, and number of CPU cores. Keep in mind that the commands may vary based on the OS. + + To verify the number of CPUs and cores, issue the following command. + + ```bash + lscpu + ``` + + To verify the memory size, issue the following command. + + ```bash + free --human + ``` + + + + + 1. Log in to [Palette](https://console.spectrocloud.com/). 2. From the left **Main Menu**, select **Clusters**, and then select the cluster with the VM where you enabled the CPU - hotplug. + or memory hotplug. 3. Select the **Virtual Machines** tab, then select the necessary VM and open its **YAML** tab. 4. In the VM YAML configuration editor, navigate to the VM object and status configurations and verify that they specify - the expected number of CPUs. Consider the following example for reference. + the expected number of CPUs or memory size. Consider the following example for reference. ```yaml spec: @@ -90,3 +171,6 @@ allows the Virtual Machine (VM) to add and remove virtual CPUs while the VM is r sockets: 5 threads: 1 ``` + + + diff --git a/redirects.js b/redirects.js index 2454363270..dcc6d8e1df 100644 --- a/redirects.js +++ b/redirects.js @@ -533,6 +533,14 @@ const redirects = [ from: "/byoos/usecases/vmware/rhel-pxk/", to: "/byoos/image-builder/build-image-vmware/rhel-pxk/", }, + { + from: "/byoos/capi-image-builder/build-image-vmware/rhel-capi/", + to: "/byoos/capi-image-builder/build-image-vmware/non-airgap-build/rhel-capi/", + }, + { + from: "/byoos/capi-image-builder/build-image-vmware/rocky-capi/", + to: "/byoos/capi-image-builder/build-image-vmware/non-airgap-build/rocky-capi/", + }, { from: "/automation/palette-cli/commands/validator/", to: "/automation/palette-cli/commands/ec/", diff --git a/static/assets/docs/images/cluster_edge_site-deployment_installation_initial-setup_tui.webp b/static/assets/docs/images/cluster_edge_site-deployment_installation_initial-setup_tui.webp index fd67ff3f7a..dd835ed3b2 100644 Binary files a/static/assets/docs/images/cluster_edge_site-deployment_installation_initial-setup_tui.webp and b/static/assets/docs/images/cluster_edge_site-deployment_installation_initial-setup_tui.webp differ diff --git a/static/assets/docs/images/clusters_clusters_cluster-grid-view.webp b/static/assets/docs/images/clusters_clusters_cluster-grid-view.webp new file mode 100644 index 0000000000..639e62514d Binary files /dev/null and b/static/assets/docs/images/clusters_clusters_cluster-grid-view.webp differ diff --git a/static/assets/docs/images/vm-management_create-manage-vm_enable-cpu-hotplug_details.webp b/static/assets/docs/images/vm-management_create-manage-vm_enable-cpu-hotplug_details.webp new file mode 100644 index 0000000000..5421d16ee6 Binary files /dev/null and b/static/assets/docs/images/vm-management_create-manage-vm_enable-cpu-hotplug_details.webp differ diff --git a/static/assets/docs/images/vm-management_create-manage-vm_enable-cpu-hotplug_flavor_box.webp b/static/assets/docs/images/vm-management_create-manage-vm_enable-cpu-hotplug_flavor_box.webp new file mode 100644 index 0000000000..c05a77ce57 Binary files /dev/null and b/static/assets/docs/images/vm-management_create-manage-vm_enable-cpu-hotplug_flavor_box.webp differ