Skip to content

Commit e77874c

Browse files
committed
AWS: Add the ability to configure throughput on GP3 volumes
GP3 volumes have the ability to configure throughput from 125 MiB/s to 2000 MiB/s. This allows the ability to set this at install time in the install-config. https://issues.redhat.com/browse/CORS-4212
1 parent 50e2ece commit e77874c

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed

machine/v1beta1/types_awsprovider.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,19 @@ type EBSBlockDeviceSpec struct {
213213
// it is not used in requests to create gp2, st1, sc1, or standard volumes.
214214
// +optional
215215
Iops *int64 `json:"iops,omitempty"`
216+
// throughputMib to provision in MiB/s supported for the volume type. Not applicable to all types.
217+
//
218+
// This parameter is valid only for gp3 volumes.
219+
// Valid Range: Minimum value of 125. Maximum value of 2000.
220+
//
221+
// When omitted, this means no opinion, and the platform is left to
222+
// choose a reasonable default, which is subject to change over time.
223+
// The current default is 125.
224+
//
225+
// +kubebuilder:validation:Minimum:=125
226+
// +kubebuilder:validation:Maximum:=2000
227+
// +optional
228+
ThroughputMib *int32 `json:"throughputMib,omitempty"`
216229
// The size of the volume, in GiB.
217230
//
218231
// Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned

machine/v1beta1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

machine/v1beta1/zz_generated.swagger_doc_generated.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openapi/generated_openapi/zz_generated.openapi.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openapi/openapi.json

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14268,6 +14268,76 @@
1426814268
}
1426914269
}
1427014270
},
14271+
"com.github.openshift.api.example.v1.FormatMarkerExamples": {
14272+
"description": "FormatMarkerExamples demonstrates all Kubebuilder Format markers supported as of Kubernetes 1.33. This struct provides a comprehensive reference for format marker validation. Each field uses a different format marker to validate its value.",
14273+
"type": "object",
14274+
"properties": {
14275+
"base64Data": {
14276+
"description": "base64Data must be valid base64-encoded data. Valid examples include aGVsbG8= (encodes \"hello\") or SGVsbG8gV29ybGQh (encodes \"Hello World!\").",
14277+
"type": "string"
14278+
},
14279+
"cidrNotation": {
14280+
"description": "cidrNotation must be a valid CIDR notation IP address range. Valid examples include IPv4 CIDR (10.0.0.0/8, 192.168.1.0/24) or IPv6 CIDR (fd00::/8, 2001:db8::/32).\n\nUse of Format=cidr is not recommended due to CVE-2021-29923 and CVE-2024-24790. Instead, use the CEL expression `isCIDR(self)` to validate CIDR notation. Additionally, use `isCIDR(self) && cidr(self).ip().family() == X` to validate IPvX specifically.",
14281+
"type": "string"
14282+
},
14283+
"dateField": {
14284+
"description": "dateField must be a valid date in RFC 3339 full-date format (YYYY-MM-DD). Valid examples include 2024-01-15 or 2023-12-31.",
14285+
"type": "string"
14286+
},
14287+
"dateTimeField": {
14288+
"description": "dateTimeField must be a valid RFC 3339 date-time. Valid examples include 2024-01-15T14:30:00Z, 2024-01-15T14:30:00+00:00, or 2024-01-15T14:30:00.123Z.",
14289+
"type": "string"
14290+
},
14291+
"durationField": {
14292+
"description": "durationField must be a valid duration string parseable by Go's time.ParseDuration. Valid time units are ns, us (or µs), ms, s, m, h. Valid examples include 30s, 5m, 1h30m, 100ms, or 1h.",
14293+
"type": "string"
14294+
},
14295+
"emailAddress": {
14296+
"description": "emailAddress must be a valid email address. Valid examples include user@example.com or firstname.lastname@company.co.uk.",
14297+
"type": "string"
14298+
},
14299+
"hostnameField": {
14300+
"description": "hostnameField must be a valid Internet hostname per RFC 1034. Valid examples include example.com, api.example.com, or my-service.",
14301+
"type": "string"
14302+
},
14303+
"ipv4Address": {
14304+
"description": "ipv4Address must be a valid IPv4 address in dotted-quad notation. Valid values range from 0.0.0.0 to 255.255.255.255 (e.g., 192.168.1.1).\n\nUse of Format=ipv4 is not recommended due to CVE-2021-29923 and CVE-2024-24790. Instead, use the CEL expression `isIP(self) && ip(self).family() == 4` to validate IPv4 addresses.",
14305+
"type": "string"
14306+
},
14307+
"ipv6Address": {
14308+
"description": "ipv6Address must be a valid IPv6 address. Valid examples include full form (2001:0db8:0000:0000:0000:0000:0000:0001) or compressed form (2001:db8::1 or ::1).\n\nUse of Format=ipv6 is not recommended due to CVE-2021-29923 and CVE-2024-24790. Instead, use the CEL expression `isIP(self) && ip(self).family() == 6` to validate IPv6 addresses.",
14309+
"type": "string"
14310+
},
14311+
"macAddress": {
14312+
"description": "macAddress must be a valid MAC address. Valid examples include 00:1A:2B:3C:4D:5E or 00-1A-2B-3C-4D-5E.",
14313+
"type": "string"
14314+
},
14315+
"passwordField": {
14316+
"description": "passwordField is a marker for sensitive data. Note that the password format marker does not perform any actual validation - it accepts any string value. This marker is primarily used to signal that the field contains sensitive information.",
14317+
"type": "string"
14318+
},
14319+
"uriField": {
14320+
"description": "uriField must be a valid URI following RFC 3986 syntax. Valid examples include https://example.com/path?query=value or /absolute-path.",
14321+
"type": "string"
14322+
},
14323+
"uuid3Field": {
14324+
"description": "uuid3Field must be a valid UUID version 3 (MD5 hash-based). Version 3 UUIDs are generated using MD5 hashing of a namespace and name. Valid example: a3bb189e-8bf9-3888-9912-ace4e6543002.",
14325+
"type": "string"
14326+
},
14327+
"uuid4Field": {
14328+
"description": "uuid4Field must be a valid UUID version 4 (random). Version 4 UUIDs are randomly generated. Valid example: 550e8400-e29b-41d4-a716-446655440000.",
14329+
"type": "string"
14330+
},
14331+
"uuid5Field": {
14332+
"description": "uuid5Field must be a valid UUID version 5 (SHA-1 hash-based). Version 5 UUIDs are generated using SHA-1 hashing of a namespace and name. Valid example: 74738ff5-5367-5958-9aee-98fffdcd1876.",
14333+
"type": "string"
14334+
},
14335+
"uuidField": {
14336+
"description": "uuidField must be a valid UUID (any version) in 8-4-4-4-12 format. Valid examples include 550e8400-e29b-41d4-a716-446655440000 or 123e4567-e89b-12d3-a456-426614174000.",
14337+
"type": "string"
14338+
}
14339+
}
14340+
},
1427114341
"com.github.openshift.api.example.v1.StableConfigType": {
1427214342
"description": "StableConfigType is a stable config type that may include TechPreviewNoUpgrade fields.\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).",
1427314343
"type": "object",
@@ -14357,6 +14427,10 @@
1435714427
"default": {},
1435814428
"$ref": "#/definitions/com.github.openshift.api.example.v1.EvolvingUnion"
1435914429
},
14430+
"formatMarkerExamples": {
14431+
"description": "formatMarkerExamples demonstrates all Kubebuilder Format markers supported as of Kubernetes 1.33. This field serves as a comprehensive reference for format marker validation.",
14432+
"$ref": "#/definitions/com.github.openshift.api.example.v1.FormatMarkerExamples"
14433+
},
1436014434
"immutableField": {
1436114435
"description": "immutableField is a field that is immutable once the object has been created. It is required at all times.",
1436214436
"type": "string",
@@ -23311,6 +23385,11 @@
2331123385
"default": {},
2331223386
"$ref": "#/definitions/com.github.openshift.api.machine.v1beta1.AWSResourceReference"
2331323387
},
23388+
"throughputMib": {
23389+
"description": "throughputMib to provision in MiB/s supported for the volume type. Not applicable to all types.\n\nThis parameter is valid only for gp3 volumes. Valid Range: Minimum value of 125. Maximum value of 2000.\n\nWhen omitted, this means no opinion, and the platform is left to choose a reasonable default, which is subject to change over time. The current default is 125.",
23390+
"type": "integer",
23391+
"format": "int32"
23392+
},
2331423393
"volumeSize": {
2331523394
"description": "The size of the volume, in GiB.\n\nConstraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned IOPS SSD (io1), 500-16384 for Throughput Optimized HDD (st1), 500-16384 for Cold HDD (sc1), and 1-1024 for Magnetic (standard) volumes. If you specify a snapshot, the volume size must be equal to or larger than the snapshot size.\n\nDefault: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.",
2331623395
"type": "integer",

0 commit comments

Comments
 (0)