diff --git a/go.mod b/go.mod index e9c84f45b..da5552170 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/golang/mock v1.6.0 github.com/onsi/ginkgo/v2 v2.27.2 github.com/onsi/gomega v1.38.2 - github.com/openshift/api v0.0.0-20251106190826-ebe535b08719 + github.com/openshift/api v0.0.0-20251120220512-cb382c9eaf42 github.com/openshift/library-go v0.0.0-20251107090138-0de9712313a5 github.com/openshift/machine-api-operator v0.2.1-0.20251110092458-e0af0f3f44b8 k8s.io/api v0.34.1 diff --git a/go.sum b/go.sum index e749703bc..da34f57a1 100644 --- a/go.sum +++ b/go.sum @@ -355,8 +355,8 @@ github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns github.com/onsi/ginkgo/v2 v2.27.2/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= -github.com/openshift/api v0.0.0-20251106190826-ebe535b08719 h1:KEwYyKaJniwhoyLB75tAMmJn9pMlk0PUlRfrsXYOhwM= -github.com/openshift/api v0.0.0-20251106190826-ebe535b08719/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY= +github.com/openshift/api v0.0.0-20251120220512-cb382c9eaf42 h1:Mo2FlDdoCZ+BE2W4C0lNcxEDeIIhfsYFP6vj4Sggp8w= +github.com/openshift/api v0.0.0-20251120220512-cb382c9eaf42/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY= github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235 h1:9JBeIXmnHlpXTQPi7LPmu1jdxznBhAE7bb1K+3D8gxY= github.com/openshift/client-go v0.0.0-20251015124057-db0dee36e235/go.mod h1:L49W6pfrZkfOE5iC1PqEkuLkXG4W0BX4w8b+L2Bv7fM= github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20250910145856-21d03d30056d h1:+sqUThLi/lmgT5/scmmjnS6+RZFtbdxRAscNfCPyLPI= diff --git a/pkg/actuators/machine/instances.go b/pkg/actuators/machine/instances.go index 990ab8b7f..e63afc988 100644 --- a/pkg/actuators/machine/instances.go +++ b/pkg/actuators/machine/instances.go @@ -316,6 +316,7 @@ func getBlockDeviceMappings(machine runtimeclient.ObjectKey, blockDeviceMappingS } // IOPS settings are only valid on IO1, IO2 and GP3 block devices + // Throughput settings are only valid on GP3 block devices // https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-volume.html switch aws.StringValue(volumeType) { case ec2.VolumeTypeIo1, ec2.VolumeTypeIo2, ec2.VolumeTypeGp3: @@ -325,6 +326,9 @@ func getBlockDeviceMappings(machine runtimeclient.ObjectKey, blockDeviceMappingS if blockDeviceMappingSpec.EBS.Iops != nil && *blockDeviceMappingSpec.EBS.Iops > 0 { blockDeviceMapping.Ebs.Iops = blockDeviceMappingSpec.EBS.Iops } + if aws.StringValue(volumeType) == ec2.VolumeTypeGp3 && blockDeviceMappingSpec.EBS.ThroughputMib != nil && *blockDeviceMappingSpec.EBS.ThroughputMib > 0 { + *blockDeviceMapping.Ebs.Throughput = int64(*blockDeviceMappingSpec.EBS.ThroughputMib) + } } if aws.StringValue(blockDeviceMappingSpec.EBS.KMSKey.ID) != "" { diff --git a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go index 005702e99..2f80945d3 100644 --- a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go +++ b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go @@ -183,6 +183,17 @@ const ( LoadBalancerTypeOpenShiftManagedDefault PlatformLoadBalancerType = "OpenShiftManagedDefault" ) +// DNSRecordsType defines whether api, api-int, and ingress records are provided by +// the internal DNS infrastructure or must be configured external to the cluster. +// +kubebuilder:validation:Enum=Internal;External +// +enum +type DNSRecordsType string + +const ( + DNSRecordsTypeExternal DNSRecordsType = "External" + DNSRecordsTypeInternal DNSRecordsType = "Internal" +) + // PlatformType is a specific supported infrastructure provider. // +kubebuilder:validation:Enum="";AWS;Azure;BareMetal;GCP;Libvirt;OpenStack;None;VSphere;oVirt;IBMCloud;KubeVirt;EquinixMetal;PowerVS;AlibabaCloud;Nutanix;External type PlatformType string @@ -1022,6 +1033,7 @@ type BareMetalPlatformSpec struct { // BareMetalPlatformStatus holds the current status of the BareMetal infrastructure provider. // For more information about the network architecture used with the BareMetal platform type, see: // https://github.com/openshift/installer/blob/master/docs/design/baremetal/networking-infrastructure.md +// +openshift:validation:FeatureGateAwareXValidation:featureGate=OnPremDNSRecords,rule="!has(self.dnsRecordsType) || self.dnsRecordsType == 'Internal' || (has(self.loadBalancer) && self.loadBalancer.type == 'UserManaged')",message="dnsRecordsType may only be set to External when loadBalancer.type is UserManaged" type BareMetalPlatformStatus struct { // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used // by components inside the cluster, like kubelets using the infrastructure rather @@ -1074,6 +1086,22 @@ type BareMetalPlatformStatus struct { // +optional LoadBalancer *BareMetalPlatformLoadBalancer `json:"loadBalancer,omitempty"` + // dnsRecordsType determines whether records for api, api-int, and ingress + // are provided by the internal DNS service or externally. + // Allowed values are `Internal`, `External`, and omitted. + // When set to `Internal`, records are provided by the internal infrastructure and + // no additional user configuration is required for the cluster to function. + // When set to `External`, records are not provided by the internal infrastructure + // and must be configured by the user on a DNS server outside the cluster. + // Cluster nodes must use this external server for their upstream DNS requests. + // This value may only be set when loadBalancer.type is set to UserManaged. + // When omitted, this means the user has no opinion and the platform is left + // to choose reasonable defaults. These defaults are subject to change over time. + // The current default is `Internal`. + // +openshift:enable:FeatureGate=OnPremDNSRecords + // +optional + DNSRecordsType DNSRecordsType `json:"dnsRecordsType,omitempty"` + // machineNetworks are IP networks used to connect all the OpenShift cluster nodes. // +listType=atomic // +kubebuilder:validation:MaxItems=32 @@ -1150,6 +1178,7 @@ type OpenStackPlatformSpec struct { } // OpenStackPlatformStatus holds the current status of the OpenStack infrastructure provider. +// +openshift:validation:FeatureGateAwareXValidation:featureGate=OnPremDNSRecords,rule="!has(self.dnsRecordsType) || self.dnsRecordsType == 'Internal' || (has(self.loadBalancer) && self.loadBalancer.type == 'UserManaged')",message="dnsRecordsType may only be set to External when loadBalancer.type is UserManaged" type OpenStackPlatformStatus struct { // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used // by components inside the cluster, like kubelets using the infrastructure rather @@ -1206,6 +1235,22 @@ type OpenStackPlatformStatus struct { // +optional LoadBalancer *OpenStackPlatformLoadBalancer `json:"loadBalancer,omitempty"` + // dnsRecordsType determines whether records for api, api-int, and ingress + // are provided by the internal DNS service or externally. + // Allowed values are `Internal`, `External`, and omitted. + // When set to `Internal`, records are provided by the internal infrastructure and + // no additional user configuration is required for the cluster to function. + // When set to `External`, records are not provided by the internal infrastructure + // and must be configured by the user on a DNS server outside the cluster. + // Cluster nodes must use this external server for their upstream DNS requests. + // This value may only be set when loadBalancer.type is set to UserManaged. + // When omitted, this means the user has no opinion and the platform is left + // to choose reasonable defaults. These defaults are subject to change over time. + // The current default is `Internal`. + // +openshift:enable:FeatureGate=OnPremDNSRecords + // +optional + DNSRecordsType DNSRecordsType `json:"dnsRecordsType,omitempty"` + // machineNetworks are IP networks used to connect all the OpenShift cluster nodes. // +listType=atomic // +kubebuilder:validation:MaxItems=32 @@ -1240,6 +1285,7 @@ type OvirtPlatformLoadBalancer struct { type OvirtPlatformSpec struct{} // OvirtPlatformStatus holds the current status of the oVirt infrastructure provider. +// +openshift:validation:FeatureGateAwareXValidation:featureGate=OnPremDNSRecords,rule="!has(self.dnsRecordsType) || self.dnsRecordsType == 'Internal' || (has(self.loadBalancer) && self.loadBalancer.type == 'UserManaged')",message="dnsRecordsType may only be set to External when loadBalancer.type is UserManaged" type OvirtPlatformStatus struct { // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used // by components inside the cluster, like kubelets using the infrastructure rather @@ -1286,6 +1332,22 @@ type OvirtPlatformStatus struct { // +kubebuilder:default={"type": "OpenShiftManagedDefault"} // +optional LoadBalancer *OvirtPlatformLoadBalancer `json:"loadBalancer,omitempty"` + + // dnsRecordsType determines whether records for api, api-int, and ingress + // are provided by the internal DNS service or externally. + // Allowed values are `Internal`, `External`, and omitted. + // When set to `Internal`, records are provided by the internal infrastructure and + // no additional user configuration is required for the cluster to function. + // When set to `External`, records are not provided by the internal infrastructure + // and must be configured by the user on a DNS server outside the cluster. + // Cluster nodes must use this external server for their upstream DNS requests. + // This value may only be set when loadBalancer.type is set to UserManaged. + // When omitted, this means the user has no opinion and the platform is left + // to choose reasonable defaults. These defaults are subject to change over time. + // The current default is `Internal`. + // +openshift:enable:FeatureGate=OnPremDNSRecords + // +optional + DNSRecordsType DNSRecordsType `json:"dnsRecordsType,omitempty"` } // VSpherePlatformLoadBalancer defines the load balancer used by the cluster on VSphere platform. @@ -1683,6 +1745,7 @@ type VSpherePlatformSpec struct { } // VSpherePlatformStatus holds the current status of the vSphere infrastructure provider. +// +openshift:validation:FeatureGateAwareXValidation:featureGate=OnPremDNSRecords,rule="!has(self.dnsRecordsType) || self.dnsRecordsType == 'Internal' || (has(self.loadBalancer) && self.loadBalancer.type == 'UserManaged')",message="dnsRecordsType may only be set to External when loadBalancer.type is UserManaged" type VSpherePlatformStatus struct { // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used // by components inside the cluster, like kubelets using the infrastructure rather @@ -1735,6 +1798,22 @@ type VSpherePlatformStatus struct { // +optional LoadBalancer *VSpherePlatformLoadBalancer `json:"loadBalancer,omitempty"` + // dnsRecordsType determines whether records for api, api-int, and ingress + // are provided by the internal DNS service or externally. + // Allowed values are `Internal`, `External`, and omitted. + // When set to `Internal`, records are provided by the internal infrastructure and + // no additional user configuration is required for the cluster to function. + // When set to `External`, records are not provided by the internal infrastructure + // and must be configured by the user on a DNS server outside the cluster. + // Cluster nodes must use this external server for their upstream DNS requests. + // This value may only be set when loadBalancer.type is set to UserManaged. + // When omitted, this means the user has no opinion and the platform is left + // to choose reasonable defaults. These defaults are subject to change over time. + // The current default is `Internal`. + // +openshift:enable:FeatureGate=OnPremDNSRecords + // +optional + DNSRecordsType DNSRecordsType `json:"dnsRecordsType,omitempty"` + // machineNetworks are IP networks used to connect all the OpenShift cluster nodes. // +listType=atomic // +kubebuilder:validation:MaxItems=32 @@ -2108,6 +2187,7 @@ type NutanixPrismElementEndpoint struct { } // NutanixPlatformStatus holds the current status of the Nutanix infrastructure provider. +// +openshift:validation:FeatureGateAwareXValidation:featureGate=OnPremDNSRecords,rule="!has(self.dnsRecordsType) || self.dnsRecordsType == 'Internal' || (has(self.loadBalancer) && self.loadBalancer.type == 'UserManaged')",message="dnsRecordsType may only be set to External when loadBalancer.type is UserManaged" type NutanixPlatformStatus struct { // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used // by components inside the cluster, like kubelets using the infrastructure rather @@ -2151,6 +2231,22 @@ type NutanixPlatformStatus struct { // +kubebuilder:default={"type": "OpenShiftManagedDefault"} // +optional LoadBalancer *NutanixPlatformLoadBalancer `json:"loadBalancer,omitempty"` + + // dnsRecordsType determines whether records for api, api-int, and ingress + // are provided by the internal DNS service or externally. + // Allowed values are `Internal`, `External`, and omitted. + // When set to `Internal`, records are provided by the internal infrastructure and + // no additional user configuration is required for the cluster to function. + // When set to `External`, records are not provided by the internal infrastructure + // and must be configured by the user on a DNS server outside the cluster. + // Cluster nodes must use this external server for their upstream DNS requests. + // This value may only be set when loadBalancer.type is set to UserManaged. + // When omitted, this means the user has no opinion and the platform is left + // to choose reasonable defaults. These defaults are subject to change over time. + // The current default is `Internal`. + // +openshift:enable:FeatureGate=OnPremDNSRecords + // +optional + DNSRecordsType DNSRecordsType `json:"dnsRecordsType,omitempty"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/vendor/github.com/openshift/api/config/v1/types_node.go b/vendor/github.com/openshift/api/config/v1/types_node.go index 1282f3315..2f627be11 100644 --- a/vendor/github.com/openshift/api/config/v1/types_node.go +++ b/vendor/github.com/openshift/api/config/v1/types_node.go @@ -79,7 +79,6 @@ type CgroupMode string const ( CgroupModeEmpty CgroupMode = "" // Empty string indicates to honor user set value on the system that should not be overridden by OpenShift - CgroupModeV1 CgroupMode = "v1" CgroupModeV2 CgroupMode = "v2" CgroupModeDefault CgroupMode = CgroupModeV2 ) diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml index a6bbab436..85875e8a3 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml @@ -1670,6 +1670,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -1748,6 +1766,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' equinixMetal: description: equinixMetal contains settings specific to the Equinix Metal infrastructure provider. @@ -2226,6 +2249,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2278,6 +2319,11 @@ spec: rule: oldSelf == '' || self == oldSelf type: object type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' openstack: description: openstack contains settings specific to the OpenStack infrastructure provider. @@ -2315,6 +2361,24 @@ spec: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). type: string + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2393,6 +2457,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' ovirt: description: ovirt contains settings specific to the oVirt infrastructure provider. @@ -2425,6 +2494,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2481,6 +2568,11 @@ spec: set or honored. It will be removed in a future release.' type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' powervs: description: powervs contains settings specific to the Power Systems Virtual Servers infrastructure provider. @@ -2633,6 +2725,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2711,6 +2821,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' type: object type: object required: diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml index 206ffb86c..f3dd3c324 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml @@ -1670,6 +1670,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -1748,6 +1766,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' equinixMetal: description: equinixMetal contains settings specific to the Equinix Metal infrastructure provider. @@ -2226,6 +2249,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2278,6 +2319,11 @@ spec: rule: oldSelf == '' || self == oldSelf type: object type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' openstack: description: openstack contains settings specific to the OpenStack infrastructure provider. @@ -2315,6 +2361,24 @@ spec: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). type: string + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2393,6 +2457,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' ovirt: description: ovirt contains settings specific to the oVirt infrastructure provider. @@ -2425,6 +2494,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2481,6 +2568,11 @@ spec: set or honored. It will be removed in a future release.' type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' powervs: description: powervs contains settings specific to the Power Systems Virtual Servers infrastructure provider. @@ -2633,6 +2725,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2711,6 +2821,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' type: object type: object required: diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml index c14a98110..99b975aee 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml @@ -1670,6 +1670,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -1748,6 +1766,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' equinixMetal: description: equinixMetal contains settings specific to the Equinix Metal infrastructure provider. @@ -2226,6 +2249,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2278,6 +2319,11 @@ spec: rule: oldSelf == '' || self == oldSelf type: object type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' openstack: description: openstack contains settings specific to the OpenStack infrastructure provider. @@ -2315,6 +2361,24 @@ spec: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). type: string + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2393,6 +2457,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' ovirt: description: ovirt contains settings specific to the oVirt infrastructure provider. @@ -2425,6 +2494,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2481,6 +2568,11 @@ spec: set or honored. It will be removed in a future release.' type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' powervs: description: powervs contains settings specific to the Power Systems Virtual Servers infrastructure provider. @@ -2633,6 +2725,24 @@ spec: rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() : true)' + dnsRecordsType: + description: |- + dnsRecordsType determines whether records for api, api-int, and ingress + are provided by the internal DNS service or externally. + Allowed values are `Internal`, `External`, and omitted. + When set to `Internal`, records are provided by the internal infrastructure and + no additional user configuration is required for the cluster to function. + When set to `External`, records are not provided by the internal infrastructure + and must be configured by the user on a DNS server outside the cluster. + Cluster nodes must use this external server for their upstream DNS requests. + This value may only be set when loadBalancer.type is set to UserManaged. + When omitted, this means the user has no opinion and the platform is left + to choose reasonable defaults. These defaults are subject to change over time. + The current default is `Internal`. + enum: + - Internal + - External + type: string ingressIP: description: |- ingressIP is an external IP which routes to the default ingress controller. @@ -2711,6 +2821,11 @@ spec: to the nodes in the cluster. type: string type: object + x-kubernetes-validations: + - message: dnsRecordsType may only be set to External when loadBalancer.type + is UserManaged + rule: '!has(self.dnsRecordsType) || self.dnsRecordsType == ''Internal'' + || (has(self.loadBalancer) && self.loadBalancer.type == ''UserManaged'')' type: object type: object required: diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml b/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml index 03b091ead..a1d37f65d 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml @@ -372,6 +372,7 @@ infrastructures.config.openshift.io: - HighlyAvailableArbiter - HighlyAvailableArbiter+DualReplica - NutanixMultiSubnets + - OnPremDNSRecords - VSphereHostVMGroupZonal - VSphereMultiNetworks FilenameOperatorName: config-operator diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go index be7d462a5..b9d0799fb 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go @@ -1527,6 +1527,7 @@ var map_BareMetalPlatformStatus = map[string]string{ "ingressIPs": "ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one.", "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for BareMetal deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", "loadBalancer": "loadBalancer defines how the load balancer used by the cluster is configured.", + "dnsRecordsType": "dnsRecordsType determines whether records for api, api-int, and ingress are provided by the internal DNS service or externally. Allowed values are `Internal`, `External`, and omitted. When set to `Internal`, records are provided by the internal infrastructure and no additional user configuration is required for the cluster to function. When set to `External`, records are not provided by the internal infrastructure and must be configured by the user on a DNS server outside the cluster. Cluster nodes must use this external server for their upstream DNS requests. This value may only be set when loadBalancer.type is set to UserManaged. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. The current default is `Internal`.", "machineNetworks": "machineNetworks are IP networks used to connect all the OpenShift cluster nodes.", } @@ -1789,6 +1790,7 @@ var map_NutanixPlatformStatus = map[string]string{ "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.\n\nDeprecated: Use IngressIPs instead.", "ingressIPs": "ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one.", "loadBalancer": "loadBalancer defines how the load balancer used by the cluster is configured.", + "dnsRecordsType": "dnsRecordsType determines whether records for api, api-int, and ingress are provided by the internal DNS service or externally. Allowed values are `Internal`, `External`, and omitted. When set to `Internal`, records are provided by the internal infrastructure and no additional user configuration is required for the cluster to function. When set to `External`, records are not provided by the internal infrastructure and must be configured by the user on a DNS server outside the cluster. Cluster nodes must use this external server for their upstream DNS requests. This value may only be set when loadBalancer.type is set to UserManaged. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. The current default is `Internal`.", } func (NutanixPlatformStatus) SwaggerDoc() map[string]string { @@ -1855,6 +1857,7 @@ var map_OpenStackPlatformStatus = map[string]string{ "ingressIPs": "ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one.", "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", "loadBalancer": "loadBalancer defines how the load balancer used by the cluster is configured.", + "dnsRecordsType": "dnsRecordsType determines whether records for api, api-int, and ingress are provided by the internal DNS service or externally. Allowed values are `Internal`, `External`, and omitted. When set to `Internal`, records are provided by the internal infrastructure and no additional user configuration is required for the cluster to function. When set to `External`, records are not provided by the internal infrastructure and must be configured by the user on a DNS server outside the cluster. Cluster nodes must use this external server for their upstream DNS requests. This value may only be set when loadBalancer.type is set to UserManaged. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. The current default is `Internal`.", "machineNetworks": "machineNetworks are IP networks used to connect all the OpenShift cluster nodes.", } @@ -1887,6 +1890,7 @@ var map_OvirtPlatformStatus = map[string]string{ "ingressIPs": "ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one.", "nodeDNSIP": "deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release.", "loadBalancer": "loadBalancer defines how the load balancer used by the cluster is configured.", + "dnsRecordsType": "dnsRecordsType determines whether records for api, api-int, and ingress are provided by the internal DNS service or externally. Allowed values are `Internal`, `External`, and omitted. When set to `Internal`, records are provided by the internal infrastructure and no additional user configuration is required for the cluster to function. When set to `External`, records are not provided by the internal infrastructure and must be configured by the user on a DNS server outside the cluster. Cluster nodes must use this external server for their upstream DNS requests. This value may only be set when loadBalancer.type is set to UserManaged. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. The current default is `Internal`.", } func (OvirtPlatformStatus) SwaggerDoc() map[string]string { @@ -2069,6 +2073,7 @@ var map_VSpherePlatformStatus = map[string]string{ "ingressIPs": "ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one.", "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for vSphere deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", "loadBalancer": "loadBalancer defines how the load balancer used by the cluster is configured.", + "dnsRecordsType": "dnsRecordsType determines whether records for api, api-int, and ingress are provided by the internal DNS service or externally. Allowed values are `Internal`, `External`, and omitted. When set to `Internal`, records are provided by the internal infrastructure and no additional user configuration is required for the cluster to function. When set to `External`, records are not provided by the internal infrastructure and must be configured by the user on a DNS server outside the cluster. Cluster nodes must use this external server for their upstream DNS requests. This value may only be set when loadBalancer.type is set to UserManaged. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. The current default is `Internal`.", "machineNetworks": "machineNetworks are IP networks used to connect all the OpenShift cluster nodes.", } diff --git a/vendor/github.com/openshift/api/features/features.go b/vendor/github.com/openshift/api/features/features.go index 910cabc5f..4dbc7fa02 100644 --- a/vendor/github.com/openshift/api/features/features.go +++ b/vendor/github.com/openshift/api/features/features.go @@ -513,6 +513,14 @@ var ( enableForClusterProfile(SelfManaged, configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() + FeatureGateNewOLMBoxCutterRuntime = newFeatureGate("NewOLMBoxCutterRuntime"). + reportProblemsToJiraComponent("olm"). + contactPerson("pegoncal"). + productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/1890"). + enableForClusterProfile(SelfManaged, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). + mustRegister() + FeatureGateInsightsOnDemandDataGather = newFeatureGate("InsightsOnDemandDataGather"). reportProblemsToJiraComponent("insights"). contactPerson("tremes"). @@ -760,8 +768,8 @@ var ( mustRegister() FeatureGateAWSDedicatedHosts = newFeatureGate("AWSDedicatedHosts"). - reportProblemsToJiraComponent("Installer"). - contactPerson("faermanj"). + reportProblemsToJiraComponent("splat"). + contactPerson("rvanderp3"). productScope(ocpSpecific). enhancementPR("https://github.com/openshift/enhancements/pull/1781"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). @@ -772,7 +780,7 @@ var ( contactPerson("vr4manta"). productScope(ocpSpecific). enhancementPR("https://github.com/openshift/enhancements/pull/1772"). - enableIn(configv1.DevPreviewNoUpgrade). + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() FeatureGatePreconfiguredUDNAddresses = newFeatureGate("PreconfiguredUDNAddresses"). @@ -799,7 +807,7 @@ var ( enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade, configv1.Default). mustRegister() - FeatureGateNoRegistryClusterOperations = newFeatureGate("NoRegistryClusterOperations"). + FeatureGateNoRegistryClusterInstall = newFeatureGate("NoRegistryClusterInstall"). reportProblemsToJiraComponent("Installer / Agent based installation"). contactPerson("andfasano"). productScope(ocpSpecific). @@ -916,4 +924,19 @@ var ( enhancementPR("https://github.com/openshift/enhancements/pull/1845"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() + FeatureGateOnPremDNSRecords = newFeatureGate("OnPremDNSRecords"). + reportProblemsToJiraComponent("Networking / On-Prem DNS"). + contactPerson("bnemec"). + productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/1803"). + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). + mustRegister() + + FeatureGateProvisioningRequestAvailable = newFeatureGate("ProvisioningRequestAvailable"). + reportProblemsToJiraComponent("Cluster Autoscaler"). + contactPerson("elmiko"). + productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/1752"). + enableIn(configv1.DevPreviewNoUpgrade). + mustRegister() ) diff --git a/vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go b/vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go index b3b38bc6c..0cc634a5f 100644 --- a/vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go +++ b/vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go @@ -114,6 +114,14 @@ type AWSMachineProviderConfig struct { // If this value is selected, capacityReservationID must be specified to identify the target reservation. // +optional MarketType MarketType `json:"marketType,omitempty"` + + // hostPlacement configures placement on AWS Dedicated Hosts. This allows admins to assign instances to specific host + // for a variety of needs including for regulatory compliance, to leverage existing per-socket or per-core software licenses (BYOL), + // and to gain visibility and control over instance placement on a physical server. + // When omitted, the instance is not constrained to a dedicated host. + // +openshift:enable:FeatureGate=AWSDedicatedHosts + // +optional + HostPlacement *HostPlacement `json:"hostPlacement,omitempty"` } // AWSConfidentialComputePolicy represents the confidential compute configuration for the instance. @@ -205,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. + // 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. + // + // +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 @@ -217,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"` @@ -393,3 +414,46 @@ const ( // When set to CapacityBlock the instance utilizes pre-purchased compute capacity (capacity blocks) with AWS Capacity Reservations. MarketTypeCapacityBlock MarketType = "CapacityBlock" ) + +// HostPlacement is the type that will be used to configure the placement of AWS instances. +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.affinity == 'DedicatedHost' ? has(self.dedicatedHost) : !has(self.dedicatedHost)",message="dedicatedHost is required when affinity is DedicatedHost, and forbidden otherwise" +// +union +type HostPlacement struct { + // affinity specifies the affinity setting for the instance. + // Allowed values are AnyAvailable and DedicatedHost. + // When Affinity is set to DedicatedHost, an instance started onto a specific host always restarts on the same host if stopped. In this scenario, the `dedicatedHost` field must be set. + // When Affinity is set to AnyAvailable, and you stop and restart the instance, it can be restarted on any available host. + // +required + // +unionDiscriminator + Affinity *HostAffinity `json:"affinity,omitempty"` + + // dedicatedHost specifies the exact host that an instance should be restarted on if stopped. + // dedicatedHost is required when 'affinity' is set to DedicatedHost, and forbidden otherwise. + // +optional + // +unionMember + DedicatedHost *DedicatedHost `json:"dedicatedHost,omitempty"` +} + +// HostAffinity selects how an instance should be placed on AWS Dedicated Hosts. +// +kubebuilder:validation:Enum:=DedicatedHost;AnyAvailable +type HostAffinity string + +const ( + // HostAffinityAnyAvailable lets the platform select any available dedicated host. + HostAffinityAnyAvailable HostAffinity = "AnyAvailable" + + // HostAffinityDedicatedHost requires specifying a particular host via dedicatedHost.host.hostID. + HostAffinityDedicatedHost HostAffinity = "DedicatedHost" +) + +// DedicatedHost represents the configuration for the usage of dedicated host. +type DedicatedHost struct { + // id identifies the AWS Dedicated Host on which the instance must run. + // The value must start with "h-" followed by 17 lowercase hexadecimal characters (0-9 and a-f). + // Must be exactly 19 characters in length. + // +kubebuilder:validation:XValidation:rule="self.matches('^h-[0-9a-f]{17}$')",message="hostID must start with 'h-' followed by 17 lowercase hexadecimal characters (0-9 and a-f)" + // +kubebuilder:validation:MinLength=19 + // +kubebuilder:validation:MaxLength=19 + // +required + ID string `json:"id,omitempty"` +} diff --git a/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.deepcopy.go index 554fc19b9..0150060f4 100644 --- a/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.deepcopy.go @@ -85,6 +85,11 @@ func (in *AWSMachineProviderConfig) DeepCopyInto(out *AWSMachineProviderConfig) *out = new(int32) **out = **in } + if in.HostPlacement != nil { + in, out := &in.HostPlacement, &out.HostPlacement + *out = new(HostPlacement) + (*in).DeepCopyInto(*out) + } return } @@ -509,6 +514,22 @@ func (in *DataDiskManagedDiskParameters) DeepCopy() *DataDiskManagedDiskParamete return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DedicatedHost) DeepCopyInto(out *DedicatedHost) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DedicatedHost. +func (in *DedicatedHost) DeepCopy() *DedicatedHost { + if in == nil { + return nil + } + out := new(DedicatedHost) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DiskEncryptionSetParameters) DeepCopyInto(out *DiskEncryptionSetParameters) { *out = *in @@ -560,6 +581,11 @@ func (in *EBSBlockDeviceSpec) DeepCopyInto(out *EBSBlockDeviceSpec) { *out = new(int64) **out = **in } + if in.ThroughputMib != nil { + in, out := &in.ThroughputMib, &out.ThroughputMib + *out = new(int32) + **out = **in + } if in.VolumeSize != nil { in, out := &in.VolumeSize, &out.VolumeSize *out = new(int64) @@ -903,6 +929,32 @@ func (in *GCPShieldedInstanceConfig) DeepCopy() *GCPShieldedInstanceConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HostPlacement) DeepCopyInto(out *HostPlacement) { + *out = *in + if in.Affinity != nil { + in, out := &in.Affinity, &out.Affinity + *out = new(HostAffinity) + **out = **in + } + if in.DedicatedHost != nil { + in, out := &in.DedicatedHost, &out.DedicatedHost + *out = new(DedicatedHost) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostPlacement. +func (in *HostPlacement) DeepCopy() *HostPlacement { + if in == nil { + return nil + } + out := new(HostPlacement) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Image) DeepCopyInto(out *Image) { *out = *in diff --git a/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.swagger_doc_generated.go index 7b74d37d0..f03e5cc4e 100644 --- a/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/machine/v1beta1/zz_generated.swagger_doc_generated.go @@ -35,6 +35,7 @@ var map_AWSMachineProviderConfig = map[string]string{ "placementGroupPartition": "placementGroupPartition is the partition number within the placement group in which to launch the instance. This must be an integer value between 1 and 7. It is only valid if the placement group, referred in `PlacementGroupName` was created with strategy set to partition.", "capacityReservationId": "capacityReservationId specifies the target Capacity Reservation into which the instance should be launched. The field size should be greater than 0 and the field input must start with cr-***", "marketType": "marketType specifies the type of market for the EC2 instance. Valid values are OnDemand, Spot, CapacityBlock and omitted.\n\nDefaults to OnDemand. When SpotMarketOptions is provided, the marketType defaults to \"Spot\".\n\nWhen set to OnDemand the instance runs as a standard OnDemand instance. When set to Spot the instance runs as a Spot instance. When set to CapacityBlock the instance utilizes pre-purchased compute capacity (capacity blocks) with AWS Capacity Reservations. If this value is selected, capacityReservationID must be specified to identify the target reservation.", + "hostPlacement": "hostPlacement configures placement on AWS Dedicated Hosts. This allows admins to assign instances to specific host for a variety of needs including for regulatory compliance, to leverage existing per-socket or per-core software licenses (BYOL), and to gain visibility and control over instance placement on a physical server. When omitted, the instance is not constrained to a dedicated host.", } func (AWSMachineProviderConfig) SwaggerDoc() map[string]string { @@ -92,14 +93,24 @@ func (CPUOptions) SwaggerDoc() map[string]string { return map_CPUOptions } +var map_DedicatedHost = map[string]string{ + "": "DedicatedHost represents the configuration for the usage of dedicated host.", + "id": "id identifies the AWS Dedicated Host on which the instance must run. The value must start with \"h-\" followed by 17 lowercase hexadecimal characters (0-9 and a-f). Must be exactly 19 characters in length.", +} + +func (DedicatedHost) SwaggerDoc() map[string]string { + return map_DedicatedHost +} + var map_EBSBlockDeviceSpec = map[string]string{ "": "EBSBlockDeviceSpec describes a block device for an EBS volume. https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsBlockDevice", "deleteOnTermination": "Indicates whether the EBS volume is deleted on machine termination.\n\nDeprecated: setting this field has no effect.", "encrypted": "Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS volumes may only be attached to machines that support Amazon EBS encryption.", "kmsKey": "Indicates the KMS key that should be used to encrypt the Amazon EBS volume.", "iops": "The number of I/O operations per second (IOPS) that the volume supports. For io1, this represents the number of IOPS that are provisioned for the volume. For gp2, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information about General Purpose SSD baseline performance, I/O credits, and bursting, see Amazon EBS Volume Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) in the Amazon Elastic Compute Cloud User Guide.\n\nMinimal and maximal IOPS for io1 and gp2 are constrained. Please, check https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html for precise boundaries for individual volumes.\n\nCondition: This parameter is required for requests to create io1 volumes; it is not used in requests to create gp2, st1, sc1, or standard volumes.", + "throughputMib": "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.", "volumeSize": "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.", - "volumeType": "The volume type: gp2, io1, st1, sc1, or standard. Default: standard", + "volumeType": "volumeType can be of type gp2, gp3, io1, st1, sc1, or standard. Default: standard", } func (EBSBlockDeviceSpec) SwaggerDoc() map[string]string { @@ -116,6 +127,16 @@ func (Filter) SwaggerDoc() map[string]string { return map_Filter } +var map_HostPlacement = map[string]string{ + "": "HostPlacement is the type that will be used to configure the placement of AWS instances.", + "affinity": "affinity specifies the affinity setting for the instance. Allowed values are AnyAvailable and DedicatedHost. When Affinity is set to DedicatedHost, an instance started onto a specific host always restarts on the same host if stopped. In this scenario, the `dedicatedHost` field must be set. When Affinity is set to AnyAvailable, and you stop and restart the instance, it can be restarted on any available host.", + "dedicatedHost": "dedicatedHost specifies the exact host that an instance should be restarted on if stopped. dedicatedHost is required when 'affinity' is set to DedicatedHost, and forbidden otherwise.", +} + +func (HostPlacement) SwaggerDoc() map[string]string { + return map_HostPlacement +} + var map_LoadBalancerReference = map[string]string{ "": "LoadBalancerReference is a reference to a load balancer on AWS.", } diff --git a/vendor/modules.txt b/vendor/modules.txt index 27032f118..97e0eb14c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -255,7 +255,7 @@ github.com/onsi/gomega/matchers/support/goraph/edge github.com/onsi/gomega/matchers/support/goraph/node github.com/onsi/gomega/matchers/support/goraph/util github.com/onsi/gomega/types -# github.com/openshift/api v0.0.0-20251106190826-ebe535b08719 +# github.com/openshift/api v0.0.0-20251120220512-cb382c9eaf42 ## explicit; go 1.24.0 github.com/openshift/api/config/v1 github.com/openshift/api/config/v1/zz_generated.crd-manifests