diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f9b7a37..d48e3f70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Support longer node pool names and allow dashes + ### Fixed - Fix containerd config that was breaking in newer flatcar versions. diff --git a/helm/cluster-aws/README.md b/helm/cluster-aws/README.md index d7ad5c4f..05370991 100644 --- a/helm/cluster-aws/README.md +++ b/helm/cluster-aws/README.md @@ -147,29 +147,29 @@ For Giant Swarm internal use only, not stable, or not supported by UIs. | `internal.migration.etcdExtraArgs` | **Etcd extra arguments**|**Type:** `object`
| | `internal.migration.etcdExtraArgs.PATTERN` | **argument**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^.+:.+$`
| | `internal.nodePools` | **Default node pool**|**Type:** `object`
**Default:** `{"def00":{"customNodeLabels":["label=default"],"instanceType":"r6i.xlarge","maxSize":3,"minSize":3}}`| -| `internal.nodePools.PATTERN` | **Node pool**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.additionalSecurityGroups` | **Machine pool additional security groups** - Additional security groups that will be added to the machine pool nodes.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.additionalSecurityGroups[*]` | **security group**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.additionalSecurityGroups[*].id` | **Id of the security group** - ID of the security group that will be added to the machine pool nodes. The security group must exist.|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.availabilityZones` | **Availability zones**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.availabilityZones[*]` | **Availability zone**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeLabels` | **Custom node labels**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeLabels[*]` | **Label**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeTaints` | **Custom node taints**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeTaints[*]` |**None**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeTaints[*].effect` | **Effect**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeTaints[*].key` | **Key**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.customNodeTaints[*].value` | **Value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.instanceType` | **EC2 instance type**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.maxSize` | **Maximum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.minSize` | **Minimum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.rootVolumeSizeGB` | **Root volume size (GB)**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.spotInstances` | **Spot instances** - Compared to on-demand instances, spot instances can help you save cost.|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.spotInstances.enabled` | **Enable**|**Type:** `boolean`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
**Default:** `false`| -| `internal.nodePools.PATTERN.spotInstances.maxPrice` | **Maximum price to pay per instance per hour, in USD.**|**Type:** `number`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.subnetTags` | **Subnet tags** - Tags to filter which AWS subnets will be used for this node pool.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.subnetTags[*]` | **Subnet tag**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `internal.nodePools.PATTERN.subnetTags[*].*` | **Tag value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
**Value pattern:** `^[ a-zA-Z0-9\._:/=+-@]+$`
| +| `internal.nodePools.PATTERN` | **Node pool**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.additionalSecurityGroups` | **Machine pool additional security groups** - Additional security groups that will be added to the machine pool nodes.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.additionalSecurityGroups[*]` | **security group**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.additionalSecurityGroups[*].id` | **Id of the security group** - ID of the security group that will be added to the machine pool nodes. The security group must exist.|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.availabilityZones` | **Availability zones**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.availabilityZones[*]` | **Availability zone**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeLabels` | **Custom node labels**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeLabels[*]` | **Label**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeTaints` | **Custom node taints**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeTaints[*]` |**None**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeTaints[*].effect` | **Effect**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeTaints[*].key` | **Key**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.customNodeTaints[*].value` | **Value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.instanceType` | **EC2 instance type**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.maxSize` | **Maximum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.minSize` | **Minimum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.rootVolumeSizeGB` | **Root volume size (GB)**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.spotInstances` | **Spot instances** - Compared to on-demand instances, spot instances can help you save cost.|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.spotInstances.enabled` | **Enable**|**Type:** `boolean`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
**Default:** `false`| +| `internal.nodePools.PATTERN.spotInstances.maxPrice` | **Maximum price to pay per instance per hour, in USD.**|**Type:** `number`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.subnetTags` | **Subnet tags** - Tags to filter which AWS subnets will be used for this node pool.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.subnetTags[*]` | **Subnet tag**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `internal.nodePools.PATTERN.subnetTags[*].*` | **Tag value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
**Value pattern:** `^[ a-zA-Z0-9\._:/=+-@]+$`
| | `internal.sandboxContainerImage` | **Kubectl image**|**Type:** `object`
| | `internal.sandboxContainerImage.name` | **Repository**|**Type:** `string`
**Default:** `"giantswarm/pause"`| | `internal.sandboxContainerImage.registry` | **Registry**|**Type:** `string`
**Default:** `"quay.io"`| @@ -205,35 +205,42 @@ Properties within the `.metadata` top-level object | `metadata.organization` | **Organization**|**Type:** `string`
| | `metadata.servicePriority` | **Service priority** - The relative importance of this cluster.|**Type:** `string`
**Default:** `"highest"`| +### Metadata +Properties within the `.global.metadata` object + +| **Property** | **Description** | **More Details** | +| :----------- | :-------------- | :--------------- | +| `global.metadata.preventDeletion` | **Prevent cluster deletion**|**Type:** `boolean`
**Default:** `false`| + ### Node pools Properties within the `.nodePools` top-level object Node pools of the cluster. If not specified, this defaults to the value of `internal.nodePools`. | **Property** | **Description** | **More Details** | | :----------- | :-------------- | :--------------- | -| `nodePools.PATTERN` | **Node pool**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.additionalSecurityGroups` | **Machine pool additional security groups** - Additional security groups that will be added to the machine pool nodes.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.additionalSecurityGroups[*]` | **security group**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.additionalSecurityGroups[*].id` | **Id of the security group** - ID of the security group that will be added to the machine pool nodes. The security group must exist.|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.availabilityZones` | **Availability zones**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.availabilityZones[*]` | **Availability zone**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeLabels` | **Custom node labels**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeLabels[*]` | **Label**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeTaints` | **Custom node taints**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeTaints[*]` |**None**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeTaints[*].effect` | **Effect**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeTaints[*].key` | **Key**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.customNodeTaints[*].value` | **Value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.instanceType` | **EC2 instance type**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.maxSize` | **Maximum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.minSize` | **Minimum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.rootVolumeSizeGB` | **Root volume size (GB)**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.spotInstances` | **Spot instances** - Compared to on-demand instances, spot instances can help you save cost.|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.spotInstances.enabled` | **Enable**|**Type:** `boolean`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
**Default:** `false`| -| `nodePools.PATTERN.spotInstances.maxPrice` | **Maximum price to pay per instance per hour, in USD.**|**Type:** `number`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.subnetTags` | **Subnet tags** - Tags to filter which AWS subnets will be used for this node pool.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.subnetTags[*]` | **Subnet tag**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
| -| `nodePools.PATTERN.subnetTags[*].*` | **Tag value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9]{5,10}$`
**Value pattern:** `^[ a-zA-Z0-9\._:/=+-@]+$`
| +| `nodePools.PATTERN` | **Node pool**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.additionalSecurityGroups` | **Machine pool additional security groups** - Additional security groups that will be added to the machine pool nodes.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.additionalSecurityGroups[*]` | **security group**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.additionalSecurityGroups[*].id` | **Id of the security group** - ID of the security group that will be added to the machine pool nodes. The security group must exist.|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.availabilityZones` | **Availability zones**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.availabilityZones[*]` | **Availability zone**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeLabels` | **Custom node labels**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeLabels[*]` | **Label**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeTaints` | **Custom node taints**|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeTaints[*]` |**None**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeTaints[*].effect` | **Effect**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeTaints[*].key` | **Key**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.customNodeTaints[*].value` | **Value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.instanceType` | **EC2 instance type**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.maxSize` | **Maximum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.minSize` | **Minimum number of nodes**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.rootVolumeSizeGB` | **Root volume size (GB)**|**Type:** `integer`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.spotInstances` | **Spot instances** - Compared to on-demand instances, spot instances can help you save cost.|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.spotInstances.enabled` | **Enable**|**Type:** `boolean`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
**Default:** `false`| +| `nodePools.PATTERN.spotInstances.maxPrice` | **Maximum price to pay per instance per hour, in USD.**|**Type:** `number`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.subnetTags` | **Subnet tags** - Tags to filter which AWS subnets will be used for this node pool.|**Type:** `array`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.subnetTags[*]` | **Subnet tag**|**Type:** `object`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
| +| `nodePools.PATTERN.subnetTags[*].*` | **Tag value**|**Type:** `string`
**Key pattern:**
`PATTERN`=`^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$`
**Value pattern:** `^[ a-zA-Z0-9\._:/=+-@]+$`
| ### Other diff --git a/helm/cluster-aws/values.schema.json b/helm/cluster-aws/values.schema.json index 3b560d8a..679f4fdb 100644 --- a/helm/cluster-aws/values.schema.json +++ b/helm/cluster-aws/values.schema.json @@ -817,7 +817,7 @@ "type": "object", "title": "Default node pool", "patternProperties": { - "^[a-z0-9]{5,10}$": { + "^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$": { "$ref": "#/$defs/machinePool" } }, @@ -940,7 +940,7 @@ "description": "Node pools of the cluster. If not specified, this defaults to the value of `internal.nodePools`.", "additionalProperties": false, "patternProperties": { - "^[a-z0-9]{5,10}$": { + "^[a-z0-9][-a-z0-9]{3,18}[a-z0-9]$": { "$ref": "#/$defs/machinePool" } }