diff --git a/configsrc/vcluster/0.30.0/vcluster.schema.json b/configsrc/vcluster/0.30.0/vcluster.schema.json index 00b9a2365..7c5f504a7 100644 --- a/configsrc/vcluster/0.30.0/vcluster.schema.json +++ b/configsrc/vcluster/0.30.0/vcluster.schema.json @@ -74,6 +74,36 @@ "type": "object", "description": "AutoSleepExclusion holds conifiguration for excluding workloads from sleeping by label(s)" }, + "AutoSnapshot": { + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable defines whether auto snapshot is enabled for the virtual cluster\n+optional" + }, + "timezone": { + "type": "string", + "description": "Timezone specifies time zone used for scheduled virtual cluster operations. Defaults to UTC.\nAccepts the same format as time.LoadLocation() in Go (https://pkg.go.dev/time#LoadLocation).\nThe value should be a location name corresponding to a file in the IANA Time Zone database, such as \"America/New_York\".\n+optional" + }, + "schedule": { + "type": "string", + "description": "Schedule specifies a scheduled time in Cron format, see https://en.wikipedia.org/wiki/Cron for a virtual cluster snapshot to be taken\n+optional" + }, + "volumes": { + "$ref": "#/$defs/VolumeSnapshot", + "description": "Volumes specifies a set of configuration for the volume snapshot\n+optional" + }, + "storage": { + "$ref": "#/$defs/ScheduledSnapshotStorage", + "description": "Storage specifies a set of configuration where the snapshot will be stored\n+optional" + }, + "retention": { + "$ref": "#/$defs/SnapshotRetention", + "description": "Retention specifies a set of configuration for how long the snapshot will be kept\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, "AutoUpgrade": { "properties": { "enabled": { @@ -262,6 +292,34 @@ "additionalProperties": false, "type": "object" }, + "ContainerStorage": { + "properties": { + "path": { + "type": "string", + "description": "Path specifies directory to store the snapshot\n+optional" + }, + "volume": { + "$ref": "#/$defs/ContainerStorageVolume", + "description": "Volume specifies which volume needs to be mounted into the conteiner to store the snapshot\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, + "ContainerStorageVolume": { + "properties": { + "name": { + "type": "string", + "description": "Name to be used to mount the volume\n+optional" + }, + "path": { + "type": "string", + "description": "Path to the volume mount\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, "ContainerdJoin": { "properties": { "enabled": { @@ -488,10 +546,6 @@ "globalMetadata": { "$ref": "#/$defs/ControlPlaneGlobalMetadata", "description": "GlobalMetadata is metadata that will be added to all resources deployed by Helm." - }, - "kubeVip": { - "$ref": "#/$defs/KubeVip", - "description": "KubeVip holds configuration for embedded kube-vip that announces the virtual cluster endpoint IP on layer 2." } }, "additionalProperties": false, @@ -879,16 +933,6 @@ "dnsConfig": { "$ref": "#/$defs/PodDNSConfig", "description": "Specifies the DNS parameters of a pod." - }, - "initContainers": { - "items": true, - "type": "array", - "description": "InitContainers are additional init containers for the statefulSet." - }, - "sidecarContainers": { - "items": true, - "type": "array", - "description": "SidecarContainers are additional sidecar containers for the statefulSet." } }, "additionalProperties": false, @@ -1072,11 +1116,7 @@ }, "dataSource": { "type": "string", - "description": "DataSource is the kine dataSource to use for the database. This depends on the database format.\nThis is optional for the external database. Examples:\n* mysql: mysql://username:password@tcp(hostname:3306)/k3s\n* postgres: postgres://username:password@hostname:5432/k3s" - }, - "identityProvider": { - "type": "string", - "description": "IdentityProvider is the kine identity provider to use when generating temporary authentication tokens for enhanced security.\nThis is optional for the external database. Examples:\n* aws: RDS IAM Authentication" + "description": "DataSource is the kine dataSource to use for the database. This depends on the database format.\nThis is optional for the embedded database. Examples:\n* mysql: mysql://username:password@tcp(hostname:3306)/k3s\n* postgres: postgres://username:password@hostname:5432/k3s" }, "keyFile": { "type": "string", @@ -1320,12 +1360,16 @@ "type": "string", "description": "Name is the name of this NodePool" }, - "nodeTypeSelector": { + "provider": { + "type": "string", + "description": "Provider is the node provider of the nodes in this pool." + }, + "requirements": { "items": { "$ref": "#/$defs/Requirement" }, "type": "array", - "description": "NodeTypeSelector filters the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." + "description": "Requirements filter the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." }, "taints": { "items": { @@ -1368,7 +1412,8 @@ "additionalProperties": false, "type": "object", "required": [ - "name" + "name", + "provider" ] }, "DynamicNodePoolDisruption": { @@ -1410,23 +1455,6 @@ "additionalProperties": false, "type": "object" }, - "EnableAutoSwitch": { - "properties": { - "enabled": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "boolean" - } - ], - "description": "Enabled defines if this option should be enabled." - } - }, - "additionalProperties": false, - "type": "object" - }, "EnableAutoSwitchWithPatches": { "properties": { "enabled": { @@ -2040,11 +2068,7 @@ }, "dataSource": { "type": "string", - "description": "DataSource is the kine dataSource to use for the database. This depends on the database format.\nThis is optional for the external database. Examples:\n* mysql: mysql://username:password@tcp(hostname:3306)/k3s\n* postgres: postgres://username:password@hostname:5432/k3s" - }, - "identityProvider": { - "type": "string", - "description": "IdentityProvider is the kine identity provider to use when generating temporary authentication tokens for enhanced security.\nThis is optional for the external database. Examples:\n* aws: RDS IAM Authentication" + "description": "DataSource is the kine dataSource to use for the database. This depends on the database format.\nThis is optional for the embedded database. Examples:\n* mysql: mysql://username:password@tcp(hostname:3306)/k3s\n* postgres: postgres://username:password@hostname:5432/k3s" }, "keyFile": { "type": "string", @@ -2328,10 +2352,6 @@ "istio": { "$ref": "#/$defs/Istio", "description": "Istio syncs DestinationRules, Gateways and VirtualServices from virtual cluster to the host." - }, - "netris": { - "type": "object", - "description": "Netris integration helps configuring netris networking for vCluster." } }, "additionalProperties": false, @@ -2552,24 +2572,6 @@ "additionalProperties": false, "type": "object" }, - "KubeVip": { - "properties": { - "enabled": { - "type": "boolean", - "description": "Enabled defines if embedded kube-vip should be enabled." - }, - "interface": { - "type": "string", - "description": "Interface is the network interface on which the VIP is announced." - }, - "gateway": { - "type": "string", - "description": "Gateway is the gateway address in CIDR notation (e.g., 10.100.0.1/24).\nThis is used to configure policy-based routing for the VIP and must include the subnet prefix." - } - }, - "additionalProperties": false, - "type": "object" - }, "KubeVirt": { "properties": { "enabled": { @@ -3111,6 +3113,28 @@ "additionalProperties": false, "type": "object" }, + "OCIStorage": { + "properties": { + "repository": { + "type": "string", + "description": "Repository OCI repository to store the snapshot\n+optional" + }, + "credential": { + "$ref": "#/$defs/SnapshotSecretCredential", + "description": "Credential secret with the OCI Credentials\n+optional" + }, + "username": { + "type": "string", + "description": "Username to authenticate with the OCI registry\n+optional" + }, + "password": { + "type": "string", + "description": "Password to authenticate with the OCI registry\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, "ObjectMeta": { "properties": { "name": { @@ -3186,7 +3210,7 @@ }, "project": { "type": "string", - "description": "Project specifies which platform project the vcluster should be imported to" + "description": "Project holds project name where vcluster should be imported" }, "autoSleep": { "$ref": "#/$defs/AutoSleep", @@ -3195,6 +3219,10 @@ "autoDelete": { "$ref": "#/$defs/AutoDelete", "description": "AutoDelete holds configuration for automatic delete\n+optional" + }, + "autoSnapshot": { + "$ref": "#/$defs/AutoSnapshot", + "description": "AutoSnapshot holds configuration for automatic snapshot of vclusters\nNote: This feature is currently in beta.\n+optional" } }, "type": "object", @@ -3451,11 +3479,8 @@ "description": "JoinNode holds configuration specifically used during joining the node (see \"kubeadm join\")." }, "autoNodes": { - "items": { - "$ref": "#/$defs/PrivateNodesAutoNodes" - }, - "type": "array", - "description": "AutoNodes stores auto nodes configuration." + "$ref": "#/$defs/PrivateNodesAutoNodes", + "description": "AutoNodes stores Auto Nodes configuration static and dynamic NodePools managed by Karpenter" }, "vpn": { "$ref": "#/$defs/PrivateNodesVPN", @@ -3468,17 +3493,6 @@ }, "PrivateNodesAutoNodes": { "properties": { - "provider": { - "type": "string", - "description": "Provider is the node provider of the nodes in this pool." - }, - "properties": { - "additionalProperties": { - "type": "string" - }, - "type": "object", - "description": "Properties are the node provider properties. This is a simple key value map and can contain things\nlike region, subscription, etc. that is then used by the node provider to create the nodes and node environment." - }, "static": { "items": { "$ref": "#/$defs/StaticNodePool" @@ -3496,9 +3510,6 @@ }, "additionalProperties": false, "type": "object", - "required": [ - "provider" - ], "description": "PrivateNodesAutoNodes defines auto nodes" }, "PrivateNodesVPN": { @@ -3534,10 +3545,6 @@ "clusterRole": { "$ref": "#/$defs/RBACClusterRole", "description": "ClusterRole holds virtual cluster cluster role configuration" - }, - "enableVolumeSnapshotRules": { - "$ref": "#/$defs/EnableAutoSwitch", - "description": "EnableVolumeSnapshotRules enables all required volume snapshot rules in the Role and\nClusterRole." } }, "additionalProperties": false, @@ -3874,6 +3881,42 @@ "additionalProperties": false, "type": "object" }, + "S3Storage": { + "properties": { + "url": { + "type": "string", + "description": "Url specifies url to the storage service\n+optional" + }, + "credential": { + "$ref": "#/$defs/SnapshotSecretCredential", + "description": "Credential secret with the S3 Credentials, it should contain AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, + "ScheduledSnapshotStorage": { + "properties": { + "type": { + "type": "string", + "description": "Type specifies supported type of storage services for a snapshot S3/OCI/Container, see https://www.vcluster.com/docs/vcluster/manage/backup-restore#store-snapshots-in-s3-buckets\n+optional" + }, + "s3": { + "$ref": "#/$defs/S3Storage", + "description": "S3 holds configuration for storing snapshots in S3-compatible bucket\n+optional" + }, + "oci": { + "$ref": "#/$defs/OCIStorage", + "description": "OCI holds configuration for storing snapshots in OCI image registries\n+optional" + }, + "container": { + "$ref": "#/$defs/ContainerStorage", + "description": "Container holds configuration for storing snapshots as local files inside a vCluster container\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, "SelectorConfig": { "properties": { "selector": { @@ -3963,6 +4006,34 @@ "type": "object", "description": "SleepModeAutoSleep holds configuration for allowing a vCluster to sleep its workloads automatically" }, + "SnapshotRetention": { + "properties": { + "period": { + "type": "integer", + "description": "Period defines the number of days a snapshot will be kept\n+optional" + }, + "maxSnapshots": { + "type": "integer", + "description": "MaxSnapshots defines the number of snapshot can be taken\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, + "SnapshotSecretCredential": { + "properties": { + "secretName": { + "type": "string", + "description": "Name secret name with credential\n+optional" + }, + "secretNamespace": { + "type": "string", + "description": "Name secret namespace with credential\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, "Standalone": { "properties": { "enabled": { @@ -3995,12 +4066,12 @@ "type": "integer", "description": "Quantity is the number of nodes to deploy for standalone mode." }, - "nodeTypeSelector": { + "requirements": { "items": { "$ref": "#/$defs/Requirement" }, "type": "array", - "description": "NodeTypeSelector filters the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." + "description": "Requirements filter the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." } }, "additionalProperties": false, @@ -4103,12 +4174,16 @@ "type": "string", "description": "Name is the name of this static nodePool" }, - "nodeTypeSelector": { + "provider": { + "type": "string", + "description": "Provider is the node provider of the nodes in this pool." + }, + "requirements": { "items": { "$ref": "#/$defs/Requirement" }, "type": "array", - "description": "NodeTypeSelector filters the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." + "description": "Requirements filter the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." }, "taints": { "items": { @@ -4137,6 +4212,7 @@ "type": "object", "required": [ "name", + "provider", "quantity" ] }, @@ -4416,10 +4492,6 @@ "$ref": "#/$defs/EnableSwitchWithPatches", "description": "Endpoints defines if endpoints created within the virtual cluster should get synced to the host cluster." }, - "endpointSlices": { - "$ref": "#/$defs/EnableSwitchWithPatches", - "description": "EndpointSlices defines if endpointslices created within the virtual cluster should get synced to the host cluster." - }, "networkPolicies": { "$ref": "#/$defs/EnableSwitchWithPatches", "description": "NetworkPolicies defines if network policies created within the virtual cluster should get synced to the host cluster." @@ -4834,6 +4906,16 @@ "type": "object", "description": "VolumeMount describes a mounting of a Volume within a container." }, + "VolumeSnapshot": { + "properties": { + "enabled": { + "type": "boolean", + "description": "Enabled specifies whether a snapshot should also include volumes in the snapshot\n+optional" + } + }, + "additionalProperties": false, + "type": "object" + }, "VolumeSnapshotController": { "properties": { "enabled": {