Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion machine/v1beta1/types_awsprovider.go
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,19 @@ type EBSBlockDeviceSpec struct {
// it is not used in requests to create gp2, st1, sc1, or standard volumes.
// +optional
Iops *int64 `json:"iops,omitempty"`
// throughputMib to provision in MiB/s supported for the volume type. Not applicable to all types.
//
// This parameter is valid only for gp3 volumes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reading this API, I don't see that it is possible for me to create a gp3 volume today. Am I missing something here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have had the ability to create gp3 volumes for quite some time. Do I need to find the code in the installer, or elsewhere to point to this?

// Valid Range: Minimum value of 125. Maximum value of 2000.
//
// When 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.
Copy link
Contributor

@sadasu sadasu Oct 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there value in adding // +default=125? Can its value be modified in a running cluster?

Can we also add a link to the documentation that you have been using for reference?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We shouldn't add defaults for this API as it's a configuration API. We may want to adjust this default over time so it's better to have nothing persisted and allow this to be defaulted by the controller when acting up on the value

//
// +kubebuilder:validation:Minimum:=125
// +kubebuilder:validation:Maximum:=2000
// +optional
ThroughputMib *int32 `json:"throughputMib,omitempty"`
// The size of the volume, in GiB.
//
// Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned
Expand All @@ -225,7 +238,7 @@ type EBSBlockDeviceSpec struct {
// a volume size, the default is the snapshot size.
// +optional
VolumeSize *int64 `json:"volumeSize,omitempty"`
// The volume type: gp2, io1, st1, sc1, or standard.
// volumeType can be of type gp2, gp3, io1, st1, sc1, or standard.
// Default: standard
// +optional
VolumeType *string `json:"volumeType,omitempty"`
Expand Down
5 changes: 5 additions & 0 deletions machine/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion machine/v1beta1/zz_generated.swagger_doc_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion openapi/generated_openapi/zz_generated.openapi.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

81 changes: 80 additions & 1 deletion openapi/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -14268,6 +14268,76 @@
}
}
},
"com.github.openshift.api.example.v1.FormatMarkerExamples": {
"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.",
"type": "object",
"properties": {
"base64Data": {
"description": "base64Data must be valid base64-encoded data. Valid examples include aGVsbG8= (encodes \"hello\") or SGVsbG8gV29ybGQh (encodes \"Hello World!\").",
"type": "string"
},
"cidrNotation": {
"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.",
"type": "string"
},
"dateField": {
"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.",
"type": "string"
},
"dateTimeField": {
"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.",
"type": "string"
},
"durationField": {
"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.",
"type": "string"
},
"emailAddress": {
"description": "emailAddress must be a valid email address. Valid examples include user@example.com or firstname.lastname@company.co.uk.",
"type": "string"
},
"hostnameField": {
"description": "hostnameField must be a valid Internet hostname per RFC 1034. Valid examples include example.com, api.example.com, or my-service.",
"type": "string"
},
"ipv4Address": {
"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.",
"type": "string"
},
"ipv6Address": {
"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.",
"type": "string"
},
"macAddress": {
"description": "macAddress must be a valid MAC address. Valid examples include 00:1A:2B:3C:4D:5E or 00-1A-2B-3C-4D-5E.",
"type": "string"
},
"passwordField": {
"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.",
"type": "string"
},
"uriField": {
"description": "uriField must be a valid URI following RFC 3986 syntax. Valid examples include https://example.com/path?query=value or /absolute-path.",
"type": "string"
},
"uuid3Field": {
"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.",
"type": "string"
},
"uuid4Field": {
"description": "uuid4Field must be a valid UUID version 4 (random). Version 4 UUIDs are randomly generated. Valid example: 550e8400-e29b-41d4-a716-446655440000.",
"type": "string"
},
"uuid5Field": {
"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.",
"type": "string"
},
"uuidField": {
"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.",
"type": "string"
}
}
},
"com.github.openshift.api.example.v1.StableConfigType": {
"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).",
"type": "object",
Expand Down Expand Up @@ -14357,6 +14427,10 @@
"default": {},
"$ref": "#/definitions/com.github.openshift.api.example.v1.EvolvingUnion"
},
"formatMarkerExamples": {
"description": "formatMarkerExamples demonstrates all Kubebuilder Format markers supported as of Kubernetes 1.33. This field serves as a comprehensive reference for format marker validation.",
"$ref": "#/definitions/com.github.openshift.api.example.v1.FormatMarkerExamples"
},
"immutableField": {
"description": "immutableField is a field that is immutable once the object has been created. It is required at all times.",
"type": "string",
Expand Down Expand Up @@ -23311,13 +23385,18 @@
"default": {},
"$ref": "#/definitions/com.github.openshift.api.machine.v1beta1.AWSResourceReference"
},
"throughputMib": {
"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.",
"type": "integer",
"format": "int32"
},
"volumeSize": {
"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.",
"type": "integer",
"format": "int64"
},
"volumeType": {
"description": "The volume type: gp2, io1, st1, sc1, or standard. Default: standard",
"description": "volumeType can be of type gp2, gp3, io1, st1, sc1, or standard. Default: standard",
"type": "string"
}
}
Expand Down