diff --git a/config/applyconfigurations/config/v1/acceptrisk.go b/config/applyconfigurations/config/v1/acceptrisk.go
new file mode 100644
index 000000000..dba8a77ed
--- /dev/null
+++ b/config/applyconfigurations/config/v1/acceptrisk.go
@@ -0,0 +1,23 @@
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1
+
+// AcceptRiskApplyConfiguration represents a declarative configuration of the AcceptRisk type for use
+// with apply.
+type AcceptRiskApplyConfiguration struct {
+ Name *string `json:"name,omitempty"`
+}
+
+// AcceptRiskApplyConfiguration constructs a declarative configuration of the AcceptRisk type for use with
+// apply.
+func AcceptRisk() *AcceptRiskApplyConfiguration {
+ return &AcceptRiskApplyConfiguration{}
+}
+
+// WithName sets the Name field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Name field is set to the value of the last call.
+func (b *AcceptRiskApplyConfiguration) WithName(value string) *AcceptRiskApplyConfiguration {
+ b.Name = &value
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/clusterversionstatus.go b/config/applyconfigurations/config/v1/clusterversionstatus.go
index e966cf424..4d44643d4 100644
--- a/config/applyconfigurations/config/v1/clusterversionstatus.go
+++ b/config/applyconfigurations/config/v1/clusterversionstatus.go
@@ -5,14 +5,15 @@ package v1
// ClusterVersionStatusApplyConfiguration represents a declarative configuration of the ClusterVersionStatus type for use
// with apply.
type ClusterVersionStatusApplyConfiguration struct {
- Desired *ReleaseApplyConfiguration `json:"desired,omitempty"`
- History []UpdateHistoryApplyConfiguration `json:"history,omitempty"`
- ObservedGeneration *int64 `json:"observedGeneration,omitempty"`
- VersionHash *string `json:"versionHash,omitempty"`
- Capabilities *ClusterVersionCapabilitiesStatusApplyConfiguration `json:"capabilities,omitempty"`
- Conditions []ClusterOperatorStatusConditionApplyConfiguration `json:"conditions,omitempty"`
- AvailableUpdates []ReleaseApplyConfiguration `json:"availableUpdates,omitempty"`
- ConditionalUpdates []ConditionalUpdateApplyConfiguration `json:"conditionalUpdates,omitempty"`
+ Desired *ReleaseApplyConfiguration `json:"desired,omitempty"`
+ History []UpdateHistoryApplyConfiguration `json:"history,omitempty"`
+ ObservedGeneration *int64 `json:"observedGeneration,omitempty"`
+ VersionHash *string `json:"versionHash,omitempty"`
+ Capabilities *ClusterVersionCapabilitiesStatusApplyConfiguration `json:"capabilities,omitempty"`
+ Conditions []ClusterOperatorStatusConditionApplyConfiguration `json:"conditions,omitempty"`
+ AvailableUpdates []ReleaseApplyConfiguration `json:"availableUpdates,omitempty"`
+ ConditionalUpdates []ConditionalUpdateApplyConfiguration `json:"conditionalUpdates,omitempty"`
+ ConditionalUpdateRisks []ConditionalUpdateRiskApplyConfiguration `json:"conditionalUpdateRisks,omitempty"`
}
// ClusterVersionStatusApplyConfiguration constructs a declarative configuration of the ClusterVersionStatus type for use with
@@ -104,3 +105,16 @@ func (b *ClusterVersionStatusApplyConfiguration) WithConditionalUpdates(values .
}
return b
}
+
+// WithConditionalUpdateRisks adds the given value to the ConditionalUpdateRisks field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the ConditionalUpdateRisks field.
+func (b *ClusterVersionStatusApplyConfiguration) WithConditionalUpdateRisks(values ...*ConditionalUpdateRiskApplyConfiguration) *ClusterVersionStatusApplyConfiguration {
+ for i := range values {
+ if values[i] == nil {
+ panic("nil value passed to WithConditionalUpdateRisks")
+ }
+ b.ConditionalUpdateRisks = append(b.ConditionalUpdateRisks, *values[i])
+ }
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/conditionalupdate.go b/config/applyconfigurations/config/v1/conditionalupdate.go
index f183fc6e2..8bffb192c 100644
--- a/config/applyconfigurations/config/v1/conditionalupdate.go
+++ b/config/applyconfigurations/config/v1/conditionalupdate.go
@@ -10,6 +10,7 @@ import (
// with apply.
type ConditionalUpdateApplyConfiguration struct {
Release *ReleaseApplyConfiguration `json:"release,omitempty"`
+ RiskNames []string `json:"riskNames,omitempty"`
Risks []ConditionalUpdateRiskApplyConfiguration `json:"risks,omitempty"`
Conditions []metav1.ConditionApplyConfiguration `json:"conditions,omitempty"`
}
@@ -28,6 +29,16 @@ func (b *ConditionalUpdateApplyConfiguration) WithRelease(value *ReleaseApplyCon
return b
}
+// WithRiskNames adds the given value to the RiskNames field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the RiskNames field.
+func (b *ConditionalUpdateApplyConfiguration) WithRiskNames(values ...string) *ConditionalUpdateApplyConfiguration {
+ for i := range values {
+ b.RiskNames = append(b.RiskNames, values[i])
+ }
+ return b
+}
+
// WithRisks adds the given value to the Risks field in the declarative configuration
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
// If called multiple times, values provided by each call will be appended to the Risks field.
diff --git a/config/applyconfigurations/config/v1/conditionalupdaterisk.go b/config/applyconfigurations/config/v1/conditionalupdaterisk.go
index 6debb6e62..fdfc14ebf 100644
--- a/config/applyconfigurations/config/v1/conditionalupdaterisk.go
+++ b/config/applyconfigurations/config/v1/conditionalupdaterisk.go
@@ -2,9 +2,14 @@
package v1
+import (
+ metav1 "k8s.io/client-go/applyconfigurations/meta/v1"
+)
+
// ConditionalUpdateRiskApplyConfiguration represents a declarative configuration of the ConditionalUpdateRisk type for use
// with apply.
type ConditionalUpdateRiskApplyConfiguration struct {
+ Conditions []metav1.ConditionApplyConfiguration `json:"conditions,omitempty"`
URL *string `json:"url,omitempty"`
Name *string `json:"name,omitempty"`
Message *string `json:"message,omitempty"`
@@ -17,6 +22,19 @@ func ConditionalUpdateRisk() *ConditionalUpdateRiskApplyConfiguration {
return &ConditionalUpdateRiskApplyConfiguration{}
}
+// WithConditions adds the given value to the Conditions field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the Conditions field.
+func (b *ConditionalUpdateRiskApplyConfiguration) WithConditions(values ...*metav1.ConditionApplyConfiguration) *ConditionalUpdateRiskApplyConfiguration {
+ for i := range values {
+ if values[i] == nil {
+ panic("nil value passed to WithConditions")
+ }
+ b.Conditions = append(b.Conditions, *values[i])
+ }
+ return b
+}
+
// WithURL sets the URL field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the URL field is set to the value of the last call.
diff --git a/config/applyconfigurations/config/v1/oidcprovider.go b/config/applyconfigurations/config/v1/oidcprovider.go
index 7d9300367..4f5aec3a5 100644
--- a/config/applyconfigurations/config/v1/oidcprovider.go
+++ b/config/applyconfigurations/config/v1/oidcprovider.go
@@ -10,6 +10,7 @@ type OIDCProviderApplyConfiguration struct {
OIDCClients []OIDCClientConfigApplyConfiguration `json:"oidcClients,omitempty"`
ClaimMappings *TokenClaimMappingsApplyConfiguration `json:"claimMappings,omitempty"`
ClaimValidationRules []TokenClaimValidationRuleApplyConfiguration `json:"claimValidationRules,omitempty"`
+ UserValidationRules []TokenUserValidationRuleApplyConfiguration `json:"userValidationRules,omitempty"`
}
// OIDCProviderApplyConfiguration constructs a declarative configuration of the OIDCProvider type for use with
@@ -67,3 +68,16 @@ func (b *OIDCProviderApplyConfiguration) WithClaimValidationRules(values ...*Tok
}
return b
}
+
+// WithUserValidationRules adds the given value to the UserValidationRules field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the UserValidationRules field.
+func (b *OIDCProviderApplyConfiguration) WithUserValidationRules(values ...*TokenUserValidationRuleApplyConfiguration) *OIDCProviderApplyConfiguration {
+ for i := range values {
+ if values[i] == nil {
+ panic("nil value passed to WithUserValidationRules")
+ }
+ b.UserValidationRules = append(b.UserValidationRules, *values[i])
+ }
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/tokenclaimvalidationcelrule.go b/config/applyconfigurations/config/v1/tokenclaimvalidationcelrule.go
new file mode 100644
index 000000000..8dda73db1
--- /dev/null
+++ b/config/applyconfigurations/config/v1/tokenclaimvalidationcelrule.go
@@ -0,0 +1,32 @@
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1
+
+// TokenClaimValidationCELRuleApplyConfiguration represents a declarative configuration of the TokenClaimValidationCELRule type for use
+// with apply.
+type TokenClaimValidationCELRuleApplyConfiguration struct {
+ Expression *string `json:"expression,omitempty"`
+ Message *string `json:"message,omitempty"`
+}
+
+// TokenClaimValidationCELRuleApplyConfiguration constructs a declarative configuration of the TokenClaimValidationCELRule type for use with
+// apply.
+func TokenClaimValidationCELRule() *TokenClaimValidationCELRuleApplyConfiguration {
+ return &TokenClaimValidationCELRuleApplyConfiguration{}
+}
+
+// WithExpression sets the Expression field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Expression field is set to the value of the last call.
+func (b *TokenClaimValidationCELRuleApplyConfiguration) WithExpression(value string) *TokenClaimValidationCELRuleApplyConfiguration {
+ b.Expression = &value
+ return b
+}
+
+// WithMessage sets the Message field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Message field is set to the value of the last call.
+func (b *TokenClaimValidationCELRuleApplyConfiguration) WithMessage(value string) *TokenClaimValidationCELRuleApplyConfiguration {
+ b.Message = &value
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/tokenclaimvalidationrule.go b/config/applyconfigurations/config/v1/tokenclaimvalidationrule.go
index 74e9f6109..c8b0c6005 100644
--- a/config/applyconfigurations/config/v1/tokenclaimvalidationrule.go
+++ b/config/applyconfigurations/config/v1/tokenclaimvalidationrule.go
@@ -9,8 +9,9 @@ import (
// TokenClaimValidationRuleApplyConfiguration represents a declarative configuration of the TokenClaimValidationRule type for use
// with apply.
type TokenClaimValidationRuleApplyConfiguration struct {
- Type *configv1.TokenValidationRuleType `json:"type,omitempty"`
- RequiredClaim *TokenRequiredClaimApplyConfiguration `json:"requiredClaim,omitempty"`
+ Type *configv1.TokenValidationRuleType `json:"type,omitempty"`
+ RequiredClaim *TokenRequiredClaimApplyConfiguration `json:"requiredClaim,omitempty"`
+ CEL *TokenClaimValidationCELRuleApplyConfiguration `json:"cel,omitempty"`
}
// TokenClaimValidationRuleApplyConfiguration constructs a declarative configuration of the TokenClaimValidationRule type for use with
@@ -34,3 +35,11 @@ func (b *TokenClaimValidationRuleApplyConfiguration) WithRequiredClaim(value *To
b.RequiredClaim = value
return b
}
+
+// WithCEL sets the CEL field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the CEL field is set to the value of the last call.
+func (b *TokenClaimValidationRuleApplyConfiguration) WithCEL(value *TokenClaimValidationCELRuleApplyConfiguration) *TokenClaimValidationRuleApplyConfiguration {
+ b.CEL = value
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/tokenissuer.go b/config/applyconfigurations/config/v1/tokenissuer.go
index 68f590abc..4c971d292 100644
--- a/config/applyconfigurations/config/v1/tokenissuer.go
+++ b/config/applyconfigurations/config/v1/tokenissuer.go
@@ -12,6 +12,7 @@ type TokenIssuerApplyConfiguration struct {
URL *string `json:"issuerURL,omitempty"`
Audiences []configv1.TokenAudience `json:"audiences,omitempty"`
CertificateAuthority *ConfigMapNameReferenceApplyConfiguration `json:"issuerCertificateAuthority,omitempty"`
+ DiscoveryURL *string `json:"discoveryURL,omitempty"`
}
// TokenIssuerApplyConfiguration constructs a declarative configuration of the TokenIssuer type for use with
@@ -45,3 +46,11 @@ func (b *TokenIssuerApplyConfiguration) WithCertificateAuthority(value *ConfigMa
b.CertificateAuthority = value
return b
}
+
+// WithDiscoveryURL sets the DiscoveryURL field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DiscoveryURL field is set to the value of the last call.
+func (b *TokenIssuerApplyConfiguration) WithDiscoveryURL(value string) *TokenIssuerApplyConfiguration {
+ b.DiscoveryURL = &value
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/tokenuservalidationrule.go b/config/applyconfigurations/config/v1/tokenuservalidationrule.go
new file mode 100644
index 000000000..2aae5f3fe
--- /dev/null
+++ b/config/applyconfigurations/config/v1/tokenuservalidationrule.go
@@ -0,0 +1,32 @@
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1
+
+// TokenUserValidationRuleApplyConfiguration represents a declarative configuration of the TokenUserValidationRule type for use
+// with apply.
+type TokenUserValidationRuleApplyConfiguration struct {
+ Expression *string `json:"expression,omitempty"`
+ Message *string `json:"message,omitempty"`
+}
+
+// TokenUserValidationRuleApplyConfiguration constructs a declarative configuration of the TokenUserValidationRule type for use with
+// apply.
+func TokenUserValidationRule() *TokenUserValidationRuleApplyConfiguration {
+ return &TokenUserValidationRuleApplyConfiguration{}
+}
+
+// WithExpression sets the Expression field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Expression field is set to the value of the last call.
+func (b *TokenUserValidationRuleApplyConfiguration) WithExpression(value string) *TokenUserValidationRuleApplyConfiguration {
+ b.Expression = &value
+ return b
+}
+
+// WithMessage sets the Message field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Message field is set to the value of the last call.
+func (b *TokenUserValidationRuleApplyConfiguration) WithMessage(value string) *TokenUserValidationRuleApplyConfiguration {
+ b.Message = &value
+ return b
+}
diff --git a/config/applyconfigurations/config/v1/update.go b/config/applyconfigurations/config/v1/update.go
index 004d1bac2..d20e3ca42 100644
--- a/config/applyconfigurations/config/v1/update.go
+++ b/config/applyconfigurations/config/v1/update.go
@@ -13,6 +13,7 @@ type UpdateApplyConfiguration struct {
Version *string `json:"version,omitempty"`
Image *string `json:"image,omitempty"`
Force *bool `json:"force,omitempty"`
+ AcceptRisks []AcceptRiskApplyConfiguration `json:"acceptRisks,omitempty"`
}
// UpdateApplyConfiguration constructs a declarative configuration of the Update type for use with
@@ -52,3 +53,16 @@ func (b *UpdateApplyConfiguration) WithForce(value bool) *UpdateApplyConfigurati
b.Force = &value
return b
}
+
+// WithAcceptRisks adds the given value to the AcceptRisks field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the AcceptRisks field.
+func (b *UpdateApplyConfiguration) WithAcceptRisks(values ...*AcceptRiskApplyConfiguration) *UpdateApplyConfiguration {
+ for i := range values {
+ if values[i] == nil {
+ panic("nil value passed to WithAcceptRisks")
+ }
+ b.AcceptRisks = append(b.AcceptRisks, *values[i])
+ }
+ return b
+}
diff --git a/config/applyconfigurations/internal/internal.go b/config/applyconfigurations/internal/internal.go
index f00417a5c..2c712f4f7 100644
--- a/config/applyconfigurations/internal/internal.go
+++ b/config/applyconfigurations/internal/internal.go
@@ -206,6 +206,12 @@ var schemaYAML = typed.YAMLObject(`types:
type:
scalar: string
default: ""
+- name: com.github.openshift.api.config.v1.AcceptRisk
+ map:
+ fields:
+ - name: name
+ type:
+ scalar: string
- name: com.github.openshift.api.config.v1.AlibabaCloudPlatformSpec
map:
elementType:
@@ -848,6 +854,14 @@ var schemaYAML = typed.YAMLObject(`types:
type:
namedType: com.github.openshift.api.config.v1.ClusterVersionCapabilitiesStatus
default: {}
+ - name: conditionalUpdateRisks
+ type:
+ list:
+ elementType:
+ namedType: com.github.openshift.api.config.v1.ConditionalUpdateRisk
+ elementRelationship: associative
+ keys:
+ - name
- name: conditionalUpdates
type:
list:
@@ -978,6 +992,12 @@ var schemaYAML = typed.YAMLObject(`types:
type:
namedType: com.github.openshift.api.config.v1.Release
default: {}
+ - name: riskNames
+ type:
+ list:
+ elementType:
+ scalar: string
+ elementRelationship: associative
- name: risks
type:
list:
@@ -989,6 +1009,14 @@ var schemaYAML = typed.YAMLObject(`types:
- name: com.github.openshift.api.config.v1.ConditionalUpdateRisk
map:
fields:
+ - name: conditions
+ type:
+ list:
+ elementType:
+ namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Condition
+ elementRelationship: associative
+ keys:
+ - type
- name: matchingRules
type:
list:
@@ -2751,6 +2779,14 @@ var schemaYAML = typed.YAMLObject(`types:
keys:
- componentNamespace
- componentName
+ - name: userValidationRules
+ type:
+ list:
+ elementType:
+ namedType: com.github.openshift.api.config.v1.TokenUserValidationRule
+ elementRelationship: associative
+ keys:
+ - expression
- name: com.github.openshift.api.config.v1.ObjectReference
map:
fields:
@@ -3689,9 +3725,22 @@ var schemaYAML = typed.YAMLObject(`types:
- name: expression
type:
scalar: string
+- name: com.github.openshift.api.config.v1.TokenClaimValidationCELRule
+ map:
+ fields:
+ - name: expression
+ type:
+ scalar: string
+ - name: message
+ type:
+ scalar: string
- name: com.github.openshift.api.config.v1.TokenClaimValidationRule
map:
fields:
+ - name: cel
+ type:
+ namedType: com.github.openshift.api.config.v1.TokenClaimValidationCELRule
+ default: {}
- name: requiredClaim
type:
namedType: com.github.openshift.api.config.v1.TokenRequiredClaim
@@ -3720,6 +3769,9 @@ var schemaYAML = typed.YAMLObject(`types:
elementType:
scalar: string
elementRelationship: associative
+ - name: discoveryURL
+ type:
+ scalar: string
- name: issuerCertificateAuthority
type:
namedType: com.github.openshift.api.config.v1.ConfigMapNameReference
@@ -3739,9 +3791,26 @@ var schemaYAML = typed.YAMLObject(`types:
type:
scalar: string
default: ""
+- name: com.github.openshift.api.config.v1.TokenUserValidationRule
+ map:
+ fields:
+ - name: expression
+ type:
+ scalar: string
+ - name: message
+ type:
+ scalar: string
- name: com.github.openshift.api.config.v1.Update
map:
fields:
+ - name: acceptRisks
+ type:
+ list:
+ elementType:
+ namedType: com.github.openshift.api.config.v1.AcceptRisk
+ elementRelationship: associative
+ keys:
+ - name
- name: architecture
type:
scalar: string
diff --git a/config/applyconfigurations/utils.go b/config/applyconfigurations/utils.go
index 99cad8e20..a68a8360c 100644
--- a/config/applyconfigurations/utils.go
+++ b/config/applyconfigurations/utils.go
@@ -20,6 +20,8 @@ import (
func ForKind(kind schema.GroupVersionKind) interface{} {
switch kind {
// Group=config.openshift.io, Version=v1
+ case v1.SchemeGroupVersion.WithKind("AcceptRisk"):
+ return &configv1.AcceptRiskApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("AlibabaCloudPlatformStatus"):
return &configv1.AlibabaCloudPlatformStatusApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("AlibabaCloudResourceTag"):
@@ -430,6 +432,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &configv1.TokenClaimMappingsApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("TokenClaimOrExpressionMapping"):
return &configv1.TokenClaimOrExpressionMappingApplyConfiguration{}
+ case v1.SchemeGroupVersion.WithKind("TokenClaimValidationCELRule"):
+ return &configv1.TokenClaimValidationCELRuleApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("TokenClaimValidationRule"):
return &configv1.TokenClaimValidationRuleApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("TokenConfig"):
@@ -438,6 +442,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &configv1.TokenIssuerApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("TokenRequiredClaim"):
return &configv1.TokenRequiredClaimApplyConfiguration{}
+ case v1.SchemeGroupVersion.WithKind("TokenUserValidationRule"):
+ return &configv1.TokenUserValidationRuleApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("Update"):
return &configv1.UpdateApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("UpdateHistory"):
diff --git a/go.mod b/go.mod
index 041ba8d6f..708a15647 100644
--- a/go.mod
+++ b/go.mod
@@ -66,3 +66,5 @@ retract v3.9.0+incompatible
// To make go aware of the retraction, we need to tag a new version that can be
// retracted by itself.
retract v0.0.1
+
+replace github.com/openshift/api => github.com/ricky-rav/api v0.0.0-20260119191252-1622757cb08b
diff --git a/go.sum b/go.sum
index 67d8b8b13..70d604b21 100644
--- a/go.sum
+++ b/go.sum
@@ -57,14 +57,14 @@ github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM
github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
-github.com/openshift/api v0.0.0-20260107103503-6d35063ca179 h1:5gMFMmuVLAcEnBAjNFql/8L2ZRPBDOxl7nmbjO5klvk=
-github.com/openshift/api v0.0.0-20260107103503-6d35063ca179/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY=
github.com/openshift/build-machinery-go v0.0.0-20250530140348-dc5b2804eeee h1:+Sp5GGnjHDhT/a/nQ1xdp43UscBMr7G5wxsYotyhzJ4=
github.com/openshift/build-machinery-go v0.0.0-20250530140348-dc5b2804eeee/go.mod h1:8jcm8UPtg2mCAsxfqKil1xrmRMI3a+XU2TZ9fF8A7TE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/ricky-rav/api v0.0.0-20260119191252-1622757cb08b h1:hTeQ47Fe+nuSKLsmrdmtzOA6hl83jfuNGk0P6aPfUJ0=
+github.com/ricky-rav/api v0.0.0-20260119191252-1622757cb08b/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
diff --git a/operator/applyconfigurations/internal/internal.go b/operator/applyconfigurations/internal/internal.go
index d2451c572..109db2468 100644
--- a/operator/applyconfigurations/internal/internal.go
+++ b/operator/applyconfigurations/internal/internal.go
@@ -389,6 +389,15 @@ var schemaYAML = typed.YAMLObject(`types:
type:
scalar: string
default: ""
+- name: com.github.openshift.api.operator.v1.BGPManagedConfig
+ map:
+ fields:
+ - name: asNumber
+ type:
+ scalar: numeric
+ - name: bgpTopology
+ type:
+ scalar: string
- name: com.github.openshift.api.operator.v1.BootImageSkewEnforcementConfig
map:
fields:
@@ -2837,6 +2846,15 @@ var schemaYAML = typed.YAMLObject(`types:
- name: version
type:
scalar: string
+- name: com.github.openshift.api.operator.v1.NoOverlayOptions
+ map:
+ fields:
+ - name: outboundSNAT
+ type:
+ scalar: string
+ - name: routing
+ type:
+ scalar: string
- name: com.github.openshift.api.operator.v1.NodeDisruptionPolicyClusterStatus
map:
fields:
@@ -3136,6 +3154,17 @@ var schemaYAML = typed.YAMLObject(`types:
- name: com.github.openshift.api.operator.v1.OVNKubernetesConfig
map:
fields:
+ - name: bgpManagedConfig
+ type:
+ namedType: com.github.openshift.api.operator.v1.BGPManagedConfig
+ default: {}
+ - name: defaultNetworkNoOverlayOptions
+ type:
+ namedType: com.github.openshift.api.operator.v1.NoOverlayOptions
+ default: {}
+ - name: defaultNetworkTransport
+ type:
+ scalar: string
- name: egressIPConfig
type:
namedType: com.github.openshift.api.operator.v1.EgressIPConfig
diff --git a/operator/applyconfigurations/operator/v1/bgpmanagedconfig.go b/operator/applyconfigurations/operator/v1/bgpmanagedconfig.go
new file mode 100644
index 000000000..fe44370a9
--- /dev/null
+++ b/operator/applyconfigurations/operator/v1/bgpmanagedconfig.go
@@ -0,0 +1,36 @@
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1
+
+import (
+ operatorv1 "github.com/openshift/api/operator/v1"
+)
+
+// BGPManagedConfigApplyConfiguration represents a declarative configuration of the BGPManagedConfig type for use
+// with apply.
+type BGPManagedConfigApplyConfiguration struct {
+ ASNumber *int64 `json:"asNumber,omitempty"`
+ BGPTopology *operatorv1.BGPTopology `json:"bgpTopology,omitempty"`
+}
+
+// BGPManagedConfigApplyConfiguration constructs a declarative configuration of the BGPManagedConfig type for use with
+// apply.
+func BGPManagedConfig() *BGPManagedConfigApplyConfiguration {
+ return &BGPManagedConfigApplyConfiguration{}
+}
+
+// WithASNumber sets the ASNumber field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the ASNumber field is set to the value of the last call.
+func (b *BGPManagedConfigApplyConfiguration) WithASNumber(value int64) *BGPManagedConfigApplyConfiguration {
+ b.ASNumber = &value
+ return b
+}
+
+// WithBGPTopology sets the BGPTopology field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the BGPTopology field is set to the value of the last call.
+func (b *BGPManagedConfigApplyConfiguration) WithBGPTopology(value operatorv1.BGPTopology) *BGPManagedConfigApplyConfiguration {
+ b.BGPTopology = &value
+ return b
+}
diff --git a/operator/applyconfigurations/operator/v1/nooverlayoptions.go b/operator/applyconfigurations/operator/v1/nooverlayoptions.go
new file mode 100644
index 000000000..7ac090c24
--- /dev/null
+++ b/operator/applyconfigurations/operator/v1/nooverlayoptions.go
@@ -0,0 +1,36 @@
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1
+
+import (
+ operatorv1 "github.com/openshift/api/operator/v1"
+)
+
+// NoOverlayOptionsApplyConfiguration represents a declarative configuration of the NoOverlayOptions type for use
+// with apply.
+type NoOverlayOptionsApplyConfiguration struct {
+ OutboundSNAT *operatorv1.SNATOption `json:"outboundSNAT,omitempty"`
+ Routing *operatorv1.RoutingOption `json:"routing,omitempty"`
+}
+
+// NoOverlayOptionsApplyConfiguration constructs a declarative configuration of the NoOverlayOptions type for use with
+// apply.
+func NoOverlayOptions() *NoOverlayOptionsApplyConfiguration {
+ return &NoOverlayOptionsApplyConfiguration{}
+}
+
+// WithOutboundSNAT sets the OutboundSNAT field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the OutboundSNAT field is set to the value of the last call.
+func (b *NoOverlayOptionsApplyConfiguration) WithOutboundSNAT(value operatorv1.SNATOption) *NoOverlayOptionsApplyConfiguration {
+ b.OutboundSNAT = &value
+ return b
+}
+
+// WithRouting sets the Routing field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Routing field is set to the value of the last call.
+func (b *NoOverlayOptionsApplyConfiguration) WithRouting(value operatorv1.RoutingOption) *NoOverlayOptionsApplyConfiguration {
+ b.Routing = &value
+ return b
+}
diff --git a/operator/applyconfigurations/operator/v1/ovnkubernetesconfig.go b/operator/applyconfigurations/operator/v1/ovnkubernetesconfig.go
index 9d878cea9..4fbfb206d 100644
--- a/operator/applyconfigurations/operator/v1/ovnkubernetesconfig.go
+++ b/operator/applyconfigurations/operator/v1/ovnkubernetesconfig.go
@@ -9,18 +9,21 @@ import (
// OVNKubernetesConfigApplyConfiguration represents a declarative configuration of the OVNKubernetesConfig type for use
// with apply.
type OVNKubernetesConfigApplyConfiguration struct {
- MTU *uint32 `json:"mtu,omitempty"`
- GenevePort *uint32 `json:"genevePort,omitempty"`
- HybridOverlayConfig *HybridOverlayConfigApplyConfiguration `json:"hybridOverlayConfig,omitempty"`
- IPsecConfig *IPsecConfigApplyConfiguration `json:"ipsecConfig,omitempty"`
- PolicyAuditConfig *PolicyAuditConfigApplyConfiguration `json:"policyAuditConfig,omitempty"`
- GatewayConfig *GatewayConfigApplyConfiguration `json:"gatewayConfig,omitempty"`
- V4InternalSubnet *string `json:"v4InternalSubnet,omitempty"`
- V6InternalSubnet *string `json:"v6InternalSubnet,omitempty"`
- EgressIPConfig *EgressIPConfigApplyConfiguration `json:"egressIPConfig,omitempty"`
- IPv4 *IPv4OVNKubernetesConfigApplyConfiguration `json:"ipv4,omitempty"`
- IPv6 *IPv6OVNKubernetesConfigApplyConfiguration `json:"ipv6,omitempty"`
- RouteAdvertisements *operatorv1.RouteAdvertisementsEnablement `json:"routeAdvertisements,omitempty"`
+ MTU *uint32 `json:"mtu,omitempty"`
+ GenevePort *uint32 `json:"genevePort,omitempty"`
+ HybridOverlayConfig *HybridOverlayConfigApplyConfiguration `json:"hybridOverlayConfig,omitempty"`
+ IPsecConfig *IPsecConfigApplyConfiguration `json:"ipsecConfig,omitempty"`
+ PolicyAuditConfig *PolicyAuditConfigApplyConfiguration `json:"policyAuditConfig,omitempty"`
+ GatewayConfig *GatewayConfigApplyConfiguration `json:"gatewayConfig,omitempty"`
+ V4InternalSubnet *string `json:"v4InternalSubnet,omitempty"`
+ V6InternalSubnet *string `json:"v6InternalSubnet,omitempty"`
+ EgressIPConfig *EgressIPConfigApplyConfiguration `json:"egressIPConfig,omitempty"`
+ IPv4 *IPv4OVNKubernetesConfigApplyConfiguration `json:"ipv4,omitempty"`
+ IPv6 *IPv6OVNKubernetesConfigApplyConfiguration `json:"ipv6,omitempty"`
+ RouteAdvertisements *operatorv1.RouteAdvertisementsEnablement `json:"routeAdvertisements,omitempty"`
+ DefaultNetworkTransport *operatorv1.TransportOption `json:"defaultNetworkTransport,omitempty"`
+ DefaultNetworkNoOverlayOptions *NoOverlayOptionsApplyConfiguration `json:"defaultNetworkNoOverlayOptions,omitempty"`
+ BGPManagedConfig *BGPManagedConfigApplyConfiguration `json:"bgpManagedConfig,omitempty"`
}
// OVNKubernetesConfigApplyConfiguration constructs a declarative configuration of the OVNKubernetesConfig type for use with
@@ -124,3 +127,27 @@ func (b *OVNKubernetesConfigApplyConfiguration) WithRouteAdvertisements(value op
b.RouteAdvertisements = &value
return b
}
+
+// WithDefaultNetworkTransport sets the DefaultNetworkTransport field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DefaultNetworkTransport field is set to the value of the last call.
+func (b *OVNKubernetesConfigApplyConfiguration) WithDefaultNetworkTransport(value operatorv1.TransportOption) *OVNKubernetesConfigApplyConfiguration {
+ b.DefaultNetworkTransport = &value
+ return b
+}
+
+// WithDefaultNetworkNoOverlayOptions sets the DefaultNetworkNoOverlayOptions field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DefaultNetworkNoOverlayOptions field is set to the value of the last call.
+func (b *OVNKubernetesConfigApplyConfiguration) WithDefaultNetworkNoOverlayOptions(value *NoOverlayOptionsApplyConfiguration) *OVNKubernetesConfigApplyConfiguration {
+ b.DefaultNetworkNoOverlayOptions = value
+ return b
+}
+
+// WithBGPManagedConfig sets the BGPManagedConfig field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the BGPManagedConfig field is set to the value of the last call.
+func (b *OVNKubernetesConfigApplyConfiguration) WithBGPManagedConfig(value *BGPManagedConfigApplyConfiguration) *OVNKubernetesConfigApplyConfiguration {
+ b.BGPManagedConfig = value
+ return b
+}
diff --git a/operator/applyconfigurations/utils.go b/operator/applyconfigurations/utils.go
index 476c71ae4..baf344126 100644
--- a/operator/applyconfigurations/utils.go
+++ b/operator/applyconfigurations/utils.go
@@ -50,6 +50,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &operatorv1.AzureCSIDriverConfigSpecApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("AzureDiskEncryptionSet"):
return &operatorv1.AzureDiskEncryptionSetApplyConfiguration{}
+ case v1.SchemeGroupVersion.WithKind("BGPManagedConfig"):
+ return &operatorv1.BGPManagedConfigApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("BootImageSkewEnforcementConfig"):
return &operatorv1.BootImageSkewEnforcementConfigApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("BootImageSkewEnforcementStatus"):
@@ -318,6 +320,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
return &operatorv1.NodePortStrategyApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("NodeStatus"):
return &operatorv1.NodeStatusApplyConfiguration{}
+ case v1.SchemeGroupVersion.WithKind("NoOverlayOptions"):
+ return &operatorv1.NoOverlayOptionsApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("OAuthAPIServerStatus"):
return &operatorv1.OAuthAPIServerStatusApplyConfiguration{}
case v1.SchemeGroupVersion.WithKind("OLM"):
diff --git a/vendor/github.com/openshift/api/config/v1/types_authentication.go b/vendor/github.com/openshift/api/config/v1/types_authentication.go
index 52a41b2fe..e300d4eab 100644
--- a/vendor/github.com/openshift/api/config/v1/types_authentication.go
+++ b/vendor/github.com/openshift/api/config/v1/types_authentication.go
@@ -5,7 +5,7 @@ import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-// +openshift:validation:FeatureGateAwareXValidation:featureGate=ExternalOIDC;ExternalOIDCWithUIDAndExtraClaimMappings,rule="!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients) || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace == specC.componentNamespace && statusC.componentName == specC.componentName) || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP, oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC, oldC.componentNamespace == specC.componentNamespace && oldC.componentName == specC.componentName)))))",message="all oidcClients in the oidcProviders must match their componentName and componentNamespace to either a previously configured oidcClient or they must exist in the status.oidcClients"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=ExternalOIDC;ExternalOIDCWithUIDAndExtraClaimMappings;ExternalOIDCWithUpstreamParity,rule="!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients) || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace == specC.componentNamespace && statusC.componentName == specC.componentName) || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP, oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC, oldC.componentNamespace == specC.componentNamespace && oldC.componentName == specC.componentName)))))",message="all oidcClients in the oidcProviders must match their componentName and componentNamespace to either a previously configured oidcClient or they must exist in the status.oidcClients"
// Authentication specifies cluster-wide settings for authentication (like OAuth and
// webhook token authenticators). The canonical name of an instance is `cluster`.
@@ -91,6 +91,7 @@ type AuthenticationSpec struct {
// +kubebuilder:validation:MaxItems=1
// +openshift:enable:FeatureGate=ExternalOIDC
// +openshift:enable:FeatureGate=ExternalOIDCWithUIDAndExtraClaimMappings
+ // +openshift:enable:FeatureGate=ExternalOIDCWithUpstreamParity
// +optional
OIDCProviders []OIDCProvider `json:"oidcProviders,omitempty"`
}
@@ -243,11 +244,27 @@ type OIDCProvider struct {
// +listType=atomic
// +optional
ClaimValidationRules []TokenClaimValidationRule `json:"claimValidationRules,omitempty"`
+
+ // userValidationRules is an optional field that configures the set of rules
+ // used to validate the cluster user identity that was constructed via
+ // mapping token claims to user identity attributes.
+ // Rules are CEL expressions that must evaluate to 'true' for authentication to succeed.
+ // If any rule in the chain of rules evaluates to 'false', authentication will fail.
+ // When specified, at least one rule must be specified and no more than 64 rules may be specified.
+ //
+ // +kubebuilder:validation:MaxItems=64
+ // +kubebuilder:validation:MinItems=1
+ // +listType=map
+ // +listMapKey=expression
+ // +optional
+ // +openshift:enable:FeatureGate=ExternalOIDCWithUpstreamParity
+ UserValidationRules []TokenUserValidationRule `json:"userValidationRules,omitempty"`
}
// +kubebuilder:validation:MinLength=1
type TokenAudience string
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=ExternalOIDCWithUpstreamParity,rule="self.?discoveryURL.orValue(\"\").size() > 0 ? (self.issuerURL.size() == 0 || self.discoveryURL.find('^.+[^/]') != self.issuerURL.find('^.+[^/]')) : true",message="discoveryURL must be different from issuerURL"
type TokenIssuer struct {
// issuerURL is a required field that configures the URL used to issue tokens
// by the identity provider.
@@ -291,6 +308,24 @@ type TokenIssuer struct {
//
// +optional
CertificateAuthority ConfigMapNameReference `json:"issuerCertificateAuthority"`
+ // discoveryURL is an optional field that, if specified, overrides the default discovery endpoint
+ // used to retrieve OIDC configuration metadata. By default, the discovery URL is derived from `issuerURL`
+ // as "{issuerURL}/.well-known/openid-configuration".
+ //
+ // The discoveryURL must be a valid absolute HTTPS URL. It must not contain query
+ // parameters, user information, or fragments. Additionally, it must differ from the value of `url` (ignoring trailing slashes).
+ // The discoveryURL value must be at least 1 character long and no longer than 2048 characters.
+ //
+ // +optional
+ // +openshift:enable:FeatureGate=ExternalOIDCWithUpstreamParity
+ // +kubebuilder:validation:XValidation:rule="isURL(self)",message="discoveryURL must be a valid URL"
+ // +kubebuilder:validation:XValidation:rule="url(self).getScheme() == 'https'",message="discoveryURL must be a valid https URL"
+ // +kubebuilder:validation:XValidation:rule="url(self).getQuery().size() == 0",message="discoveryURL must not contain query parameters"
+ // +kubebuilder:validation:XValidation:rule="self.matches('^[^#]*$')",message="discoveryURL must not contain fragments"
+ // +kubebuilder:validation:XValidation:rule="!self.matches('^https://.+:.+@.+/.*$')",message="discoveryURL must not contain user info"
+ // +kubebuilder:validation:MinLength=1
+ // +kubebuilder:validation:MaxLength=2048
+ DiscoveryURL string `json:"discoveryURL,omitempty"`
}
type TokenClaimMappings struct {
@@ -717,37 +752,56 @@ type PrefixedClaimMapping struct {
Prefix string `json:"prefix"`
}
-// TokenValidationRuleType represents the different
-// claim validation rule types that can be configured.
+// TokenValidationRuleType defines the type of token validation rule.
// +enum
+// +openshift:validation:FeatureGateAwareEnum:featureGate="",enum="RequiredClaim";
+// +openshift:validation:FeatureGateAwareEnum:featureGate=ExternalOIDC,enum="RequiredClaim";
+// +openshift:validation:FeatureGateAwareEnum:featureGate=ExternalOIDCWithUIDAndExtraClaimMappings,enum="RequiredClaim";
+// +openshift:validation:FeatureGateAwareEnum:featureGate=ExternalOIDCWithUpstreamParity,enum="RequiredClaim";"CEL"
type TokenValidationRuleType string
const (
+ // TokenValidationRuleTypeRequiredClaim indicates that the token must contain a specific claim.
+ // Used as a value for TokenValidationRuleType.
TokenValidationRuleTypeRequiredClaim = "RequiredClaim"
+ // TokenValidationRuleTypeCEL indicates that the token validation is defined via a CEL expression.
+ // Used as a value for TokenValidationRuleType.
+ TokenValidationRuleTypeCEL = "CEL"
)
+// TokenClaimValidationRule represents a validation rule based on token claims.
+// If type is RequiredClaim, requiredClaim must be set.
+// If Type is CEL, CEL must be set and RequiredClaim must be omitted.
+//
+// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'RequiredClaim' ? has(self.requiredClaim) : !has(self.requiredClaim)",message="requiredClaim must be set when type is 'RequiredClaim', and forbidden otherwise"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=ExternalOIDCWithUpstreamParity,rule="has(self.type) && self.type == 'CEL' ? has(self.cel) : !has(self.cel)",message="cel must be set when type is 'CEL', and forbidden otherwise"
type TokenClaimValidationRule struct {
// type is an optional field that configures the type of the validation rule.
//
- // Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
- //
- // When set to 'RequiredClaim', the Kubernetes API server
- // will be configured to validate that the incoming JWT
- // contains the required claim and that its value matches
- // the required value.
+ // Allowed values are "RequiredClaim" and "CEL".
//
- // Defaults to 'RequiredClaim'.
+ // When set to 'RequiredClaim', the Kubernetes API server will be configured
+ // to validate that the incoming JWT contains the required claim and that its
+ // value matches the required value.
//
- // +kubebuilder:validation:Enum={"RequiredClaim"}
- // +kubebuilder:default="RequiredClaim"
+ // When set to 'CEL', the Kubernetes API server will be configured
+ // to validate the incoming JWT against the configured CEL expression.
+ // +required
Type TokenValidationRuleType `json:"type"`
- // requiredClaim is an optional field that configures the required claim
- // and value that the Kubernetes API server will use to validate if an incoming
- // JWT is valid for this identity provider.
+ // requiredClaim allows configuring a required claim name and its expected value.
+ // This field is required when `type` is set to RequiredClaim, and must be omitted
+ // when `type` is set to any other value. The Kubernetes API server uses this field
+ // to validate if an incoming JWT is valid for this identity provider.
//
// +optional
RequiredClaim *TokenRequiredClaim `json:"requiredClaim,omitempty"`
+
+ // cel holds the CEL expression and message for validation.
+ // Must be set when Type is "CEL", and forbidden otherwise.
+ // +optional
+ // +openshift:enable:FeatureGate=ExternalOIDCWithUpstreamParity
+ CEL TokenClaimValidationCELRule `json:"cel,omitempty,omitzero"`
}
type TokenRequiredClaim struct {
@@ -771,3 +825,45 @@ type TokenRequiredClaim struct {
// +required
RequiredValue string `json:"requiredValue"`
}
+
+type TokenClaimValidationCELRule struct {
+ // expression is a CEL expression evaluated against token claims.
+ // expression is required, must be at least 1 character in length and must not exceed 1024 characters.
+ // The expression must return a boolean value where 'true' signals a valid token and 'false' an invalid one.
+ //
+ // +kubebuilder:validation:MinLength=1
+ // +kubebuilder:validation:MaxLength=1024
+ // +required
+ Expression string `json:"expression,omitempty"`
+
+ // message is a required human-readable message to be logged by the Kubernetes API server
+ // if the CEL expression defined in 'expression' fails.
+ // message must be at least 1 character in length and must not exceed 256 characters.
+ // +required
+ // +kubebuilder:validation:MinLength=1
+ // +kubebuilder:validation:MaxLength=256
+ Message string `json:"message,omitempty"`
+}
+
+// TokenUserValidationRule provides a CEL-based rule used to validate a token subject.
+// Each rule contains a CEL expression that is evaluated against the token’s claims.
+type TokenUserValidationRule struct {
+ // expression is a required CEL expression that performs a validation
+ // on cluster user identity attributes like username, groups, etc.
+ // The expression must evaluate to a boolean value.
+ // When the expression evaluates to 'true', the cluster user identity is considered valid.
+ // When the expression evaluates to 'false', the cluster user identity is not considered valid.
+ // expression must be at least 1 character in length and must not exceed 1024 characters.
+ //
+ // +required
+ // +kubebuilder:validation:MinLength=1
+ // +kubebuilder:validation:MaxLength=1024
+ Expression string `json:"expression,omitempty"`
+ // message is a required human-readable message to be logged by the Kubernetes API server
+ // if the CEL expression defined in 'expression' fails.
+ // message must be at least 1 character in length and must not exceed 256 characters.
+ // +required
+ // +kubebuilder:validation:MinLength=1
+ // +kubebuilder:validation:MaxLength=256
+ Message string `json:"message,omitempty"`
+}
diff --git a/vendor/github.com/openshift/api/config/v1/types_cluster_version.go b/vendor/github.com/openshift/api/config/v1/types_cluster_version.go
index e5aad151e..5f36f693d 100644
--- a/vendor/github.com/openshift/api/config/v1/types_cluster_version.go
+++ b/vendor/github.com/openshift/api/config/v1/types_cluster_version.go
@@ -199,9 +199,23 @@ type ClusterVersionStatus struct {
// availableUpdates. This list may be empty if no updates are
// recommended, if the update service is unavailable, or if an empty
// or invalid channel has been specified.
+ // +kubebuilder:validation:MaxItems=500
// +listType=atomic
// +optional
ConditionalUpdates []ConditionalUpdate `json:"conditionalUpdates,omitempty"`
+
+ // conditionalUpdateRisks contains the list of risks associated with conditionalUpdates.
+ // When performing a conditional update, all its associated risks will be compared with the set of accepted risks in the spec.desiredUpdate.acceptRisks field.
+ // If all risks for a conditional update are included in the spec.desiredUpdate.acceptRisks set, the conditional update can proceed, otherwise it is blocked.
+ // The risk names in the list must be unique.
+ // conditionalUpdateRisks must not contain more than 500 entries.
+ // +openshift:enable:FeatureGate=ClusterUpdateAcceptRisks
+ // +kubebuilder:validation:MaxItems=500
+ // +kubebuilder:validation:MinItems=1
+ // +listType=map
+ // +listMapKey=name
+ // +optional
+ ConditionalUpdateRisks []ConditionalUpdateRisk `json:"conditionalUpdateRisks,omitempty"`
}
// UpdateState is a constant representing whether an update was successfully
@@ -258,7 +272,7 @@ type UpdateHistory struct {
Verified bool `json:"verified"`
// acceptedRisks records risks which were accepted to initiate the update.
- // For example, it may menition an Upgradeable=False or missing signature
+ // For example, it may mention an Upgradeable=False or missing signature
// that was overridden via desiredUpdate.force, or an update that was
// initiated despite not being in the availableUpdates set of recommended
// update targets.
@@ -732,6 +746,30 @@ type Update struct {
//
// +optional
Force bool `json:"force"`
+
+ // acceptRisks is an optional set of names of conditional update risks that are considered acceptable.
+ // A conditional update is performed only if all of its risks are acceptable.
+ // This list may contain entries that apply to current, previous or future updates.
+ // The entries therefore may not map directly to a risk in .status.conditionalUpdateRisks.
+ // acceptRisks must not contain more than 1000 entries.
+ // Entries in this list must be unique.
+ // +openshift:enable:FeatureGate=ClusterUpdateAcceptRisks
+ // +kubebuilder:validation:MaxItems=1000
+ // +kubebuilder:validation:MinItems=1
+ // +listType=map
+ // +listMapKey=name
+ // +optional
+ AcceptRisks []AcceptRisk `json:"acceptRisks,omitempty"`
+}
+
+// AcceptRisk represents a risk that is considered acceptable.
+type AcceptRisk struct {
+ // name is the name of the acceptable risk.
+ // It must be a non-empty string and must not exceed 256 characters.
+ // +kubebuilder:validation:MinLength=1
+ // +kubebuilder:validation:MaxLength=256
+ // +required
+ Name string `json:"name,omitempty"`
}
// Release represents an OpenShift release image and associated metadata.
@@ -787,12 +825,27 @@ type ConditionalUpdate struct {
// +required
Release Release `json:"release"`
+ // riskNames represents the set of the names of conditionalUpdateRisks that are relevant to this update for some clusters.
+ // The Applies condition of each conditionalUpdateRisks entry declares if that risk applies to this cluster.
+ // A conditional update is accepted only if each of its risks either does not apply to the cluster or is considered acceptable by the cluster administrator.
+ // The latter means that the risk names are included in value of the spec.desiredUpdate.acceptRisks field.
+ // Entries must be unique and must not exceed 256 characters.
+ // riskNames must not contain more than 500 entries.
+ // +openshift:enable:FeatureGate=ClusterUpdateAcceptRisks
+ // +kubebuilder:validation:MinItems=1
+ // +kubebuilder:validation:items:MaxLength=256
+ // +kubebuilder:validation:MaxItems=500
+ // +listType=set
+ // +optional
+ RiskNames []string `json:"riskNames,omitempty"`
+
// risks represents the range of issues associated with
// updating to the target release. The cluster-version
// operator will evaluate all entries, and only recommend the
// update if there is at least one entry and all entries
// recommend the update.
// +kubebuilder:validation:MinItems=1
+ // +kubebuilder:validation:MaxItems=200
// +patchMergeKey=name
// +patchStrategy=merge
// +listType=map
@@ -813,6 +866,20 @@ type ConditionalUpdate struct {
// for not recommending a conditional update.
// +k8s:deepcopy-gen=true
type ConditionalUpdateRisk struct {
+ // conditions represents the observations of the conditional update
+ // risk's current status. Known types are:
+ // * Applies, for whether the risk applies to the current cluster.
+ // The condition's types in the list must be unique.
+ // conditions must not contain more than one entry.
+ // +openshift:enable:FeatureGate=ClusterUpdateAcceptRisks
+ // +kubebuilder:validation:XValidation:rule="self.exists_one(x, x.type == 'Applies')",message="must contain a condition of type 'Applies'"
+ // +kubebuilder:validation:MaxItems=8
+ // +kubebuilder:validation:MinItems=1
+ // +listType=map
+ // +listMapKey=type
+ // +optional
+ Conditions []metav1.Condition `json:"conditions,omitempty"`
+
// url contains information about this risk.
// +kubebuilder:validation:Format=uri
// +kubebuilder:validation:MinLength=1
diff --git a/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go b/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go
index b18ef647c..1e5189796 100644
--- a/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go
+++ b/vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go
@@ -4,178 +4,130 @@ package v1
// is used by operators to apply TLS security settings to operands.
// +union
type TLSSecurityProfile struct {
- // type is one of Old, Intermediate, Modern or Custom. Custom provides
- // the ability to specify individual TLS security profile parameters.
- // Old, Intermediate and Modern are TLS security profiles based on:
+ // type is one of Old, Intermediate, Modern or Custom. Custom provides the
+ // ability to specify individual TLS security profile parameters.
//
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations
+ // The profiles are currently based on version 5.0 of the Mozilla Server Side TLS
+ // configuration guidelines (released 2019-06-28) with TLS 1.3 ciphers added for
+ // forward compatibility. See: https://ssl-config.mozilla.org/guidelines/5.0.json
//
- // The profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers
- // are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be
- // reduced.
- //
- // Note that the Modern profile is currently not supported because it is not
- // yet well adopted by common software libraries.
+ // The profiles are intent based, so they may change over time as new ciphers are
+ // developed and existing ciphers are found to be insecure. Depending on
+ // precisely which ciphers are available to a process, the list may be reduced.
//
// +unionDiscriminator
// +optional
Type TLSProfileType `json:"type"`
- // old is a TLS security profile based on:
- //
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility
+
+ // old is a TLS profile for use when services need to be accessed by very old
+ // clients or libraries and should be used only as a last resort.
//
- // and looks like this (yaml):
+ // The cipher list includes TLS 1.3 ciphers for forward compatibility, followed
+ // by the "old" profile ciphers.
//
+ // This profile is equivalent to a Custom profile specified as:
+ // minTLSVersion: VersionTLS10
// ciphers:
- //
// - TLS_AES_128_GCM_SHA256
- //
// - TLS_AES_256_GCM_SHA384
- //
// - TLS_CHACHA20_POLY1305_SHA256
- //
// - ECDHE-ECDSA-AES128-GCM-SHA256
- //
// - ECDHE-RSA-AES128-GCM-SHA256
- //
// - ECDHE-ECDSA-AES256-GCM-SHA384
- //
// - ECDHE-RSA-AES256-GCM-SHA384
- //
// - ECDHE-ECDSA-CHACHA20-POLY1305
- //
// - ECDHE-RSA-CHACHA20-POLY1305
- //
// - DHE-RSA-AES128-GCM-SHA256
- //
// - DHE-RSA-AES256-GCM-SHA384
- //
// - DHE-RSA-CHACHA20-POLY1305
- //
// - ECDHE-ECDSA-AES128-SHA256
- //
// - ECDHE-RSA-AES128-SHA256
- //
// - ECDHE-ECDSA-AES128-SHA
- //
// - ECDHE-RSA-AES128-SHA
- //
// - ECDHE-ECDSA-AES256-SHA384
- //
// - ECDHE-RSA-AES256-SHA384
- //
// - ECDHE-ECDSA-AES256-SHA
- //
// - ECDHE-RSA-AES256-SHA
- //
// - DHE-RSA-AES128-SHA256
- //
// - DHE-RSA-AES256-SHA256
- //
// - AES128-GCM-SHA256
- //
// - AES256-GCM-SHA384
- //
// - AES128-SHA256
- //
// - AES256-SHA256
- //
// - AES128-SHA
- //
// - AES256-SHA
- //
// - DES-CBC3-SHA
//
- // minTLSVersion: VersionTLS10
- //
// +optional
// +nullable
Old *OldTLSProfile `json:"old,omitempty"`
- // intermediate is a TLS security profile based on:
- //
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29
+
+ // intermediate is a TLS profile for use when you do not need compatibility with
+ // legacy clients and want to remain highly secure while being compatible with
+ // most clients currently in use.
//
- // and looks like this (yaml):
+ // The cipher list includes TLS 1.3 ciphers for forward compatibility, followed
+ // by the "intermediate" profile ciphers.
//
+ // This profile is equivalent to a Custom profile specified as:
+ // minTLSVersion: VersionTLS12
// ciphers:
- //
// - TLS_AES_128_GCM_SHA256
- //
// - TLS_AES_256_GCM_SHA384
- //
// - TLS_CHACHA20_POLY1305_SHA256
- //
// - ECDHE-ECDSA-AES128-GCM-SHA256
- //
// - ECDHE-RSA-AES128-GCM-SHA256
- //
// - ECDHE-ECDSA-AES256-GCM-SHA384
- //
// - ECDHE-RSA-AES256-GCM-SHA384
- //
// - ECDHE-ECDSA-CHACHA20-POLY1305
- //
// - ECDHE-RSA-CHACHA20-POLY1305
- //
// - DHE-RSA-AES128-GCM-SHA256
- //
// - DHE-RSA-AES256-GCM-SHA384
//
- // minTLSVersion: VersionTLS12
- //
// +optional
// +nullable
Intermediate *IntermediateTLSProfile `json:"intermediate,omitempty"`
- // modern is a TLS security profile based on:
- //
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility
- //
- // and looks like this (yaml):
+
+ // modern is a TLS security profile for use with clients that support TLS 1.3 and
+ // do not need backward compatibility for older clients.
//
+ // This profile is equivalent to a Custom profile specified as:
+ // minTLSVersion: VersionTLS13
// ciphers:
- //
// - TLS_AES_128_GCM_SHA256
- //
// - TLS_AES_256_GCM_SHA384
- //
// - TLS_CHACHA20_POLY1305_SHA256
//
- // minTLSVersion: VersionTLS13
- //
// +optional
// +nullable
Modern *ModernTLSProfile `json:"modern,omitempty"`
+
// custom is a user-defined TLS security profile. Be extremely careful using a custom
// profile as invalid configurations can be catastrophic. An example custom profile
// looks like this:
//
+ // minTLSVersion: VersionTLS11
// ciphers:
- //
// - ECDHE-ECDSA-CHACHA20-POLY1305
- //
// - ECDHE-RSA-CHACHA20-POLY1305
- //
// - ECDHE-RSA-AES128-GCM-SHA256
- //
// - ECDHE-ECDSA-AES128-GCM-SHA256
//
- // minTLSVersion: VersionTLS11
- //
// +optional
// +nullable
Custom *CustomTLSProfile `json:"custom,omitempty"`
}
-// OldTLSProfile is a TLS security profile based on:
-// https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility
+// OldTLSProfile is a TLS security profile based on the "old" configuration of
+// the Mozilla Server Side TLS configuration guidelines.
type OldTLSProfile struct{}
-// IntermediateTLSProfile is a TLS security profile based on:
-// https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29
+// IntermediateTLSProfile is a TLS security profile based on the "intermediate"
+// configuration of the Mozilla Server Side TLS configuration guidelines.
type IntermediateTLSProfile struct{}
-// ModernTLSProfile is a TLS security profile based on:
-// https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility
+// ModernTLSProfile is a TLS security profile based on the "modern" configuration
+// of the Mozilla Server Side TLS configuration guidelines.
type ModernTLSProfile struct{}
// CustomTLSProfile is a user-defined TLS security profile. Be extremely careful
@@ -189,16 +141,19 @@ type CustomTLSProfile struct {
type TLSProfileType string
const (
- // Old is a TLS security profile based on:
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility
+ // TLSProfileOldType sets parameters based on the "old" configuration of
+ // the Mozilla Server Side TLS configuration guidelines.
TLSProfileOldType TLSProfileType = "Old"
- // Intermediate is a TLS security profile based on:
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29
+
+ // TLSProfileIntermediateType sets parameters based on the "intermediate"
+ // configuration of the Mozilla Server Side TLS configuration guidelines.
TLSProfileIntermediateType TLSProfileType = "Intermediate"
- // Modern is a TLS security profile based on:
- // https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility
+
+ // TLSProfileModernType sets parameters based on the "modern" configuration
+ // of the Mozilla Server Side TLS configuration guidelines.
TLSProfileModernType TLSProfileType = "Modern"
- // Custom is a TLS security profile that allows for user-defined parameters.
+
+ // TLSProfileCustomType is a TLS security profile that allows for user-defined parameters.
TLSProfileCustomType TLSProfileType = "Custom"
)
@@ -219,8 +174,6 @@ type TLSProfileSpec struct {
//
// minTLSVersion: VersionTLS11
//
- // NOTE: currently the highest minTLSVersion allowed is VersionTLS12
- //
MinTLSVersion TLSProtocolVersion `json:"minTLSVersion"`
}
@@ -245,11 +198,16 @@ const (
VersionTLS13 TLSProtocolVersion = "VersionTLS13"
)
-// TLSProfiles Contains a map of TLSProfileType names to TLSProfileSpec.
+// TLSProfiles contains a map of TLSProfileType names to TLSProfileSpec.
+//
+// These profiles are based on version 5.0 of the Mozilla Server Side TLS
+// configuration guidelines (2019-06-28) with TLS 1.3 cipher suites prepended for
+// forward compatibility. See: https://ssl-config.mozilla.org/guidelines/5.0.json
//
-// NOTE: The caller needs to make sure to check that these constants are valid for their binary. Not all
-// entries map to values for all binaries. In the case of ties, the kube-apiserver wins. Do not fail,
-// just be sure to whitelist only and everything will be ok.
+// NOTE: The caller needs to make sure to check that these constants are valid
+// for their binary. Not all entries map to values for all binaries. In the case
+// of ties, the kube-apiserver wins. Do not fail, just be sure to include only
+// valid entries and everything will be ok.
var TLSProfiles = map[TLSProfileType]*TLSProfileSpec{
TLSProfileOldType: {
Ciphers: []string{
diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go
index d80aebdf3..30b85b78e 100644
--- a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go
+++ b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go
@@ -316,6 +316,22 @@ func (in *AWSServiceEndpoint) DeepCopy() *AWSServiceEndpoint {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *AcceptRisk) DeepCopyInto(out *AcceptRisk) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AcceptRisk.
+func (in *AcceptRisk) DeepCopy() *AcceptRisk {
+ if in == nil {
+ return nil
+ }
+ out := new(AcceptRisk)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *AdmissionConfig) DeepCopyInto(out *AdmissionConfig) {
*out = *in
@@ -1393,7 +1409,7 @@ func (in *ClusterVersionSpec) DeepCopyInto(out *ClusterVersionSpec) {
if in.DesiredUpdate != nil {
in, out := &in.DesiredUpdate, &out.DesiredUpdate
*out = new(Update)
- **out = **in
+ (*in).DeepCopyInto(*out)
}
if in.Capabilities != nil {
in, out := &in.Capabilities, &out.Capabilities
@@ -1456,6 +1472,13 @@ func (in *ClusterVersionStatus) DeepCopyInto(out *ClusterVersionStatus) {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
+ if in.ConditionalUpdateRisks != nil {
+ in, out := &in.ConditionalUpdateRisks, &out.ConditionalUpdateRisks
+ *out = make([]ConditionalUpdateRisk, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
return
}
@@ -1544,6 +1567,11 @@ func (in *ComponentRouteStatus) DeepCopy() *ComponentRouteStatus {
func (in *ConditionalUpdate) DeepCopyInto(out *ConditionalUpdate) {
*out = *in
in.Release.DeepCopyInto(&out.Release)
+ if in.RiskNames != nil {
+ in, out := &in.RiskNames, &out.RiskNames
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
if in.Risks != nil {
in, out := &in.Risks, &out.Risks
*out = make([]ConditionalUpdateRisk, len(*in))
@@ -1574,6 +1602,13 @@ func (in *ConditionalUpdate) DeepCopy() *ConditionalUpdate {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ConditionalUpdateRisk) DeepCopyInto(out *ConditionalUpdateRisk) {
*out = *in
+ if in.Conditions != nil {
+ in, out := &in.Conditions, &out.Conditions
+ *out = make([]metav1.Condition, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
if in.MatchingRules != nil {
in, out := &in.MatchingRules, &out.MatchingRules
*out = make([]ClusterCondition, len(*in))
@@ -4807,6 +4842,11 @@ func (in *OIDCProvider) DeepCopyInto(out *OIDCProvider) {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
+ if in.UserValidationRules != nil {
+ in, out := &in.UserValidationRules, &out.UserValidationRules
+ *out = make([]TokenUserValidationRule, len(*in))
+ copy(*out, *in)
+ }
return
}
@@ -6405,6 +6445,22 @@ func (in *TokenClaimOrExpressionMapping) DeepCopy() *TokenClaimOrExpressionMappi
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TokenClaimValidationCELRule) DeepCopyInto(out *TokenClaimValidationCELRule) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenClaimValidationCELRule.
+func (in *TokenClaimValidationCELRule) DeepCopy() *TokenClaimValidationCELRule {
+ if in == nil {
+ return nil
+ }
+ out := new(TokenClaimValidationCELRule)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *TokenClaimValidationRule) DeepCopyInto(out *TokenClaimValidationRule) {
*out = *in
@@ -6413,6 +6469,7 @@ func (in *TokenClaimValidationRule) DeepCopyInto(out *TokenClaimValidationRule)
*out = new(TokenRequiredClaim)
**out = **in
}
+ out.CEL = in.CEL
return
}
@@ -6485,9 +6542,30 @@ func (in *TokenRequiredClaim) DeepCopy() *TokenRequiredClaim {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *TokenUserValidationRule) DeepCopyInto(out *TokenUserValidationRule) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenUserValidationRule.
+func (in *TokenUserValidationRule) DeepCopy() *TokenUserValidationRule {
+ if in == nil {
+ return nil
+ }
+ out := new(TokenUserValidationRule)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Update) DeepCopyInto(out *Update) {
*out = *in
+ if in.AcceptRisks != nil {
+ in, out := &in.AcceptRisks, &out.AcceptRisks
+ *out = make([]AcceptRisk, len(*in))
+ copy(*out, *in)
+ }
return
}
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 b113921f2..5d4794e4b 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
@@ -31,6 +31,7 @@ authentications.config.openshift.io:
FeatureGates:
- ExternalOIDC
- ExternalOIDCWithUIDAndExtraClaimMappings
+ - ExternalOIDCWithUpstreamParity
FilenameOperatorName: config-operator
FilenameOperatorOrdering: "01"
FilenameRunLevel: "0000_10"
@@ -141,6 +142,7 @@ clusterversions.config.openshift.io:
Capability: ""
Category: ""
FeatureGates:
+ - ClusterUpdateAcceptRisks
- ImageStreamImportMode
- SignatureStores
FilenameOperatorName: cluster-version-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 e465cd1c8..e7bc0aebb 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
@@ -449,6 +449,7 @@ var map_OIDCProvider = map[string]string{
"oidcClients": "oidcClients is an optional field that configures how on-cluster, platform clients should request tokens from the identity provider. oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.",
"claimMappings": "claimMappings is a required field that configures the rules to be used by the Kubernetes API server for translating claims in a JWT token, issued by the identity provider, to a cluster identity.",
"claimValidationRules": "claimValidationRules is an optional field that configures the rules to be used by the Kubernetes API server for validating the claims in a JWT token issued by the identity provider.\n\nValidation rules are joined via an AND operation.",
+ "userValidationRules": "userValidationRules is an optional field that configures the set of rules used to validate the cluster user identity that was constructed via mapping token claims to user identity attributes. Rules are CEL expressions that must evaluate to 'true' for authentication to succeed. If any rule in the chain of rules evaluates to 'false', authentication will fail. When specified, at least one rule must be specified and no more than 64 rules may be specified.",
}
func (OIDCProvider) SwaggerDoc() map[string]string {
@@ -494,9 +495,20 @@ func (TokenClaimOrExpressionMapping) SwaggerDoc() map[string]string {
return map_TokenClaimOrExpressionMapping
}
+var map_TokenClaimValidationCELRule = map[string]string{
+ "expression": "expression is a CEL expression evaluated against token claims. expression is required, must be at least 1 character in length and must not exceed 1024 characters. The expression must return a boolean value where 'true' signals a valid token and 'false' an invalid one.",
+ "message": "message is a required human-readable message to be logged by the Kubernetes API server if the CEL expression defined in 'expression' fails. message must be at least 1 character in length and must not exceed 256 characters.",
+}
+
+func (TokenClaimValidationCELRule) SwaggerDoc() map[string]string {
+ return map_TokenClaimValidationCELRule
+}
+
var map_TokenClaimValidationRule = map[string]string{
- "type": "type is an optional field that configures the type of the validation rule.\n\nAllowed values are 'RequiredClaim' and omitted (not provided or an empty string).\n\nWhen set to 'RequiredClaim', the Kubernetes API server will be configured to validate that the incoming JWT contains the required claim and that its value matches the required value.\n\nDefaults to 'RequiredClaim'.",
- "requiredClaim": "requiredClaim is an optional field that configures the required claim and value that the Kubernetes API server will use to validate if an incoming JWT is valid for this identity provider.",
+ "": "TokenClaimValidationRule represents a validation rule based on token claims. If type is RequiredClaim, requiredClaim must be set. If Type is CEL, CEL must be set and RequiredClaim must be omitted.",
+ "type": "type is an optional field that configures the type of the validation rule.\n\nAllowed values are \"RequiredClaim\" and \"CEL\".\n\nWhen set to 'RequiredClaim', the Kubernetes API server will be configured to validate that the incoming JWT contains the required claim and that its value matches the required value.\n\nWhen set to 'CEL', the Kubernetes API server will be configured to validate the incoming JWT against the configured CEL expression.",
+ "requiredClaim": "requiredClaim allows configuring a required claim name and its expected value. This field is required when `type` is set to RequiredClaim, and must be omitted when `type` is set to any other value. The Kubernetes API server uses this field to validate if an incoming JWT is valid for this identity provider.",
+ "cel": "cel holds the CEL expression and message for validation. Must be set when Type is \"CEL\", and forbidden otherwise.",
}
func (TokenClaimValidationRule) SwaggerDoc() map[string]string {
@@ -507,6 +519,7 @@ var map_TokenIssuer = map[string]string{
"issuerURL": "issuerURL is a required field that configures the URL used to issue tokens by the identity provider. The Kubernetes API server determines how authentication tokens should be handled by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.\n\nMust be at least 1 character and must not exceed 512 characters in length. Must be a valid URL that uses the 'https' scheme and does not contain a query, fragment or user.",
"audiences": "audiences is a required field that configures the acceptable audiences the JWT token, issued by the identity provider, must be issued to. At least one of the entries must match the 'aud' claim in the JWT token.\n\naudiences must contain at least one entry and must not exceed ten entries.",
"issuerCertificateAuthority": "issuerCertificateAuthority is an optional field that configures the certificate authority, used by the Kubernetes API server, to validate the connection to the identity provider when fetching discovery information.\n\nWhen not specified, the system trust is used.\n\nWhen specified, it must reference a ConfigMap in the openshift-config namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt' key in the data field of the ConfigMap.",
+ "discoveryURL": "discoveryURL is an optional field that, if specified, overrides the default discovery endpoint used to retrieve OIDC configuration metadata. By default, the discovery URL is derived from `issuerURL` as \"{issuerURL}/.well-known/openid-configuration\".\n\nThe discoveryURL must be a valid absolute HTTPS URL. It must not contain query parameters, user information, or fragments. Additionally, it must differ from the value of `url` (ignoring trailing slashes). The discoveryURL value must be at least 1 character long and no longer than 2048 characters.",
}
func (TokenIssuer) SwaggerDoc() map[string]string {
@@ -522,6 +535,16 @@ func (TokenRequiredClaim) SwaggerDoc() map[string]string {
return map_TokenRequiredClaim
}
+var map_TokenUserValidationRule = map[string]string{
+ "": "TokenUserValidationRule provides a CEL-based rule used to validate a token subject. Each rule contains a CEL expression that is evaluated against the token’s claims.",
+ "expression": "expression is a required CEL expression that performs a validation on cluster user identity attributes like username, groups, etc. The expression must evaluate to a boolean value. When the expression evaluates to 'true', the cluster user identity is considered valid. When the expression evaluates to 'false', the cluster user identity is not considered valid. expression must be at least 1 character in length and must not exceed 1024 characters.",
+ "message": "message is a required human-readable message to be logged by the Kubernetes API server if the CEL expression defined in 'expression' fails. message must be at least 1 character in length and must not exceed 256 characters.",
+}
+
+func (TokenUserValidationRule) SwaggerDoc() map[string]string {
+ return map_TokenUserValidationRule
+}
+
var map_UsernameClaimMapping = map[string]string{
"claim": "claim is a required field that configures the JWT token claim whose value is assigned to the cluster identity field associated with this mapping.\n\nclaim must not be an empty string (\"\") and must not exceed 256 characters.",
"prefixPolicy": "prefixPolicy is an optional field that configures how a prefix should be applied to the value of the JWT claim specified in the 'claim' field.\n\nAllowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).\n\nWhen set to 'Prefix', the value specified in the prefix field will be prepended to the value of the JWT claim. The prefix field must be set when prefixPolicy is 'Prefix'.\n\nWhen set to 'NoPrefix', no prefix will be prepended to the value of the JWT claim.\n\nWhen omitted, this means no opinion and the platform is left to choose any prefixes that are applied which is subject to change over time. Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim when the claim is not 'email'. As an example, consider the following scenario:\n `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,\n the JWT claims include \"username\":\"userA\" and \"email\":\"userA@myoidc.tld\",\n and `claim` is set to:\n - \"username\": the mapped value will be \"https://myoidc.tld#userA\"\n - \"email\": the mapped value will be \"userA@myoidc.tld\"",
@@ -724,6 +747,15 @@ func (OperandVersion) SwaggerDoc() map[string]string {
return map_OperandVersion
}
+var map_AcceptRisk = map[string]string{
+ "": "AcceptRisk represents a risk that is considered acceptable.",
+ "name": "name is the name of the acceptable risk. It must be a non-empty string and must not exceed 256 characters.",
+}
+
+func (AcceptRisk) SwaggerDoc() map[string]string {
+ return map_AcceptRisk
+}
+
var map_ClusterCondition = map[string]string{
"": "ClusterCondition is a union of typed cluster conditions. The 'type' property determines which of the type-specific properties are relevant. When evaluated on a cluster, the condition may match, not match, or fail to evaluate.",
"type": "type represents the cluster-condition type. This defines the members and semantics of any additional properties.",
@@ -790,15 +822,16 @@ func (ClusterVersionSpec) SwaggerDoc() map[string]string {
}
var map_ClusterVersionStatus = map[string]string{
- "": "ClusterVersionStatus reports the status of the cluster versioning, including any upgrades that are in progress. The current field will be set to whichever version the cluster is reconciling to, and the conditions array will report whether the update succeeded, is in progress, or is failing.",
- "desired": "desired is the version that the cluster is reconciling towards. If the cluster is not yet fully initialized desired will be set with the information available, which may be an image or a tag.",
- "history": "history contains a list of the most recent versions applied to the cluster. This value may be empty during cluster startup, and then will be updated when a new update is being applied. The newest update is first in the list and it is ordered by recency. Updates in the history have state Completed if the rollout completed - if an update was failing or halfway applied the state will be Partial. Only a limited amount of update history is preserved.",
- "observedGeneration": "observedGeneration reports which version of the spec is being synced. If this value is not equal to metadata.generation, then the desired and conditions fields may represent a previous version.",
- "versionHash": "versionHash is a fingerprint of the content that the cluster will be updated with. It is used by the operator to avoid unnecessary work and is for internal use only.",
- "capabilities": "capabilities describes the state of optional, core cluster components.",
- "conditions": "conditions provides information about the cluster version. The condition \"Available\" is set to true if the desiredUpdate has been reached. The condition \"Progressing\" is set to true if an update is being applied. The condition \"Degraded\" is set to true if an update is currently blocked by a temporary or permanent error. Conditions are only valid for the current desiredUpdate when metadata.generation is equal to status.generation.",
- "availableUpdates": "availableUpdates contains updates recommended for this cluster. Updates which appear in conditionalUpdates but not in availableUpdates may expose this cluster to known issues. This list may be empty if no updates are recommended, if the update service is unavailable, or if an invalid channel has been specified.",
- "conditionalUpdates": "conditionalUpdates contains the list of updates that may be recommended for this cluster if it meets specific required conditions. Consumers interested in the set of updates that are actually recommended for this cluster should use availableUpdates. This list may be empty if no updates are recommended, if the update service is unavailable, or if an empty or invalid channel has been specified.",
+ "": "ClusterVersionStatus reports the status of the cluster versioning, including any upgrades that are in progress. The current field will be set to whichever version the cluster is reconciling to, and the conditions array will report whether the update succeeded, is in progress, or is failing.",
+ "desired": "desired is the version that the cluster is reconciling towards. If the cluster is not yet fully initialized desired will be set with the information available, which may be an image or a tag.",
+ "history": "history contains a list of the most recent versions applied to the cluster. This value may be empty during cluster startup, and then will be updated when a new update is being applied. The newest update is first in the list and it is ordered by recency. Updates in the history have state Completed if the rollout completed - if an update was failing or halfway applied the state will be Partial. Only a limited amount of update history is preserved.",
+ "observedGeneration": "observedGeneration reports which version of the spec is being synced. If this value is not equal to metadata.generation, then the desired and conditions fields may represent a previous version.",
+ "versionHash": "versionHash is a fingerprint of the content that the cluster will be updated with. It is used by the operator to avoid unnecessary work and is for internal use only.",
+ "capabilities": "capabilities describes the state of optional, core cluster components.",
+ "conditions": "conditions provides information about the cluster version. The condition \"Available\" is set to true if the desiredUpdate has been reached. The condition \"Progressing\" is set to true if an update is being applied. The condition \"Degraded\" is set to true if an update is currently blocked by a temporary or permanent error. Conditions are only valid for the current desiredUpdate when metadata.generation is equal to status.generation.",
+ "availableUpdates": "availableUpdates contains updates recommended for this cluster. Updates which appear in conditionalUpdates but not in availableUpdates may expose this cluster to known issues. This list may be empty if no updates are recommended, if the update service is unavailable, or if an invalid channel has been specified.",
+ "conditionalUpdates": "conditionalUpdates contains the list of updates that may be recommended for this cluster if it meets specific required conditions. Consumers interested in the set of updates that are actually recommended for this cluster should use availableUpdates. This list may be empty if no updates are recommended, if the update service is unavailable, or if an empty or invalid channel has been specified.",
+ "conditionalUpdateRisks": "conditionalUpdateRisks contains the list of risks associated with conditionalUpdates. When performing a conditional update, all its associated risks will be compared with the set of accepted risks in the spec.desiredUpdate.acceptRisks field. If all risks for a conditional update are included in the spec.desiredUpdate.acceptRisks set, the conditional update can proceed, otherwise it is blocked. The risk names in the list must be unique. conditionalUpdateRisks must not contain more than 500 entries.",
}
func (ClusterVersionStatus) SwaggerDoc() map[string]string {
@@ -821,6 +854,7 @@ func (ComponentOverride) SwaggerDoc() map[string]string {
var map_ConditionalUpdate = map[string]string{
"": "ConditionalUpdate represents an update which is recommended to some clusters on the version the current cluster is reconciling, but which may not be recommended for the current cluster.",
"release": "release is the target of the update.",
+ "riskNames": "riskNames represents the set of the names of conditionalUpdateRisks that are relevant to this update for some clusters. The Applies condition of each conditionalUpdateRisks entry declares if that risk applies to this cluster. A conditional update is accepted only if each of its risks either does not apply to the cluster or is considered acceptable by the cluster administrator. The latter means that the risk names are included in value of the spec.desiredUpdate.acceptRisks field. Entries must be unique and must not exceed 256 characters. riskNames must not contain more than 500 entries.",
"risks": "risks represents the range of issues associated with updating to the target release. The cluster-version operator will evaluate all entries, and only recommend the update if there is at least one entry and all entries recommend the update.",
"conditions": "conditions represents the observations of the conditional update's current status. Known types are: * Recommended, for whether the update is recommended for the current cluster.",
}
@@ -831,6 +865,7 @@ func (ConditionalUpdate) SwaggerDoc() map[string]string {
var map_ConditionalUpdateRisk = map[string]string{
"": "ConditionalUpdateRisk represents a reason and cluster-state for not recommending a conditional update.",
+ "conditions": "conditions represents the observations of the conditional update risk's current status. Known types are: * Applies, for whether the risk applies to the current cluster. The condition's types in the list must be unique. conditions must not contain more than one entry.",
"url": "url contains information about this risk.",
"name": "name is the CamelCase reason for not recommending a conditional update, in the event that matchingRules match the cluster state.",
"message": "message provides additional information about the risk of updating, in the event that matchingRules match the cluster state. This is only to be consumed by humans. It may contain Line Feed characters (U+000A), which should be rendered as new lines.",
@@ -879,6 +914,7 @@ var map_Update = map[string]string{
"version": "version is a semantic version identifying the update version. version is required if architecture is specified. If both version and image are set, the version extracted from the referenced image must match the specified version.",
"image": "image is a container image location that contains the update. image should be used when the desired version does not exist in availableUpdates or history. When image is set, architecture cannot be specified. If both version and image are set, the version extracted from the referenced image must match the specified version.",
"force": "force allows an administrator to update to an image that has failed verification or upgradeable checks that are designed to keep your cluster safe. Only use this if: * you are testing unsigned release images in short-lived test clusters or * you are working around a known bug in the cluster-version\n operator and you have verified the authenticity of the provided\n image yourself.\nThe provided image will run with full administrative access to the cluster. Do not use this flag with images that come from unknown or potentially malicious sources.",
+ "acceptRisks": "acceptRisks is an optional set of names of conditional update risks that are considered acceptable. A conditional update is performed only if all of its risks are acceptable. This list may contain entries that apply to current, previous or future updates. The entries therefore may not map directly to a risk in .status.conditionalUpdateRisks. acceptRisks must not contain more than 1000 entries. Entries in this list must be unique.",
}
func (Update) SwaggerDoc() map[string]string {
@@ -893,7 +929,7 @@ var map_UpdateHistory = map[string]string{
"version": "version is a semantic version identifying the update version. If the requested image does not define a version, or if a failure occurs retrieving the image, this value may be empty.",
"image": "image is a container image location that contains the update. This value is always populated.",
"verified": "verified indicates whether the provided update was properly verified before it was installed. If this is false the cluster may not be trusted. Verified does not cover upgradeable checks that depend on the cluster state at the time when the update target was accepted.",
- "acceptedRisks": "acceptedRisks records risks which were accepted to initiate the update. For example, it may menition an Upgradeable=False or missing signature that was overridden via desiredUpdate.force, or an update that was initiated despite not being in the availableUpdates set of recommended update targets.",
+ "acceptedRisks": "acceptedRisks records risks which were accepted to initiate the update. For example, it may mention an Upgradeable=False or missing signature that was overridden via desiredUpdate.force, or an update that was initiated despite not being in the availableUpdates set of recommended update targets.",
}
func (UpdateHistory) SwaggerDoc() map[string]string {
@@ -2943,7 +2979,7 @@ func (CustomTLSProfile) SwaggerDoc() map[string]string {
}
var map_IntermediateTLSProfile = map[string]string{
- "": "IntermediateTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29",
+ "": "IntermediateTLSProfile is a TLS security profile based on the \"intermediate\" configuration of the Mozilla Server Side TLS configuration guidelines.",
}
func (IntermediateTLSProfile) SwaggerDoc() map[string]string {
@@ -2951,7 +2987,7 @@ func (IntermediateTLSProfile) SwaggerDoc() map[string]string {
}
var map_ModernTLSProfile = map[string]string{
- "": "ModernTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility",
+ "": "ModernTLSProfile is a TLS security profile based on the \"modern\" configuration of the Mozilla Server Side TLS configuration guidelines.",
}
func (ModernTLSProfile) SwaggerDoc() map[string]string {
@@ -2959,7 +2995,7 @@ func (ModernTLSProfile) SwaggerDoc() map[string]string {
}
var map_OldTLSProfile = map[string]string{
- "": "OldTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility",
+ "": "OldTLSProfile is a TLS security profile based on the \"old\" configuration of the Mozilla Server Side TLS configuration guidelines.",
}
func (OldTLSProfile) SwaggerDoc() map[string]string {
@@ -2969,7 +3005,7 @@ func (OldTLSProfile) SwaggerDoc() map[string]string {
var map_TLSProfileSpec = map[string]string{
"": "TLSProfileSpec is the desired behavior of a TLSSecurityProfile.",
"ciphers": "ciphers is used to specify the cipher algorithms that are negotiated during the TLS handshake. Operators may remove entries their operands do not support. For example, to use DES-CBC3-SHA (yaml):\n\n ciphers:\n - DES-CBC3-SHA",
- "minTLSVersion": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: VersionTLS11\n\nNOTE: currently the highest minTLSVersion allowed is VersionTLS12",
+ "minTLSVersion": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: VersionTLS11",
}
func (TLSProfileSpec) SwaggerDoc() map[string]string {
@@ -2978,11 +3014,11 @@ func (TLSProfileSpec) SwaggerDoc() map[string]string {
var map_TLSSecurityProfile = map[string]string{
"": "TLSSecurityProfile defines the schema for a TLS security profile. This object is used by operators to apply TLS security settings to operands.",
- "type": "type is one of Old, Intermediate, Modern or Custom. Custom provides the ability to specify individual TLS security profile parameters. Old, Intermediate and Modern are TLS security profiles based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations\n\nThe profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be reduced.\n\nNote that the Modern profile is currently not supported because it is not yet well adopted by common software libraries.",
- "old": "old is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility\n\nand looks like this (yaml):\n\n ciphers:\n\n - TLS_AES_128_GCM_SHA256\n\n - TLS_AES_256_GCM_SHA384\n\n - TLS_CHACHA20_POLY1305_SHA256\n\n - ECDHE-ECDSA-AES128-GCM-SHA256\n\n - ECDHE-RSA-AES128-GCM-SHA256\n\n - ECDHE-ECDSA-AES256-GCM-SHA384\n\n - ECDHE-RSA-AES256-GCM-SHA384\n\n - ECDHE-ECDSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-CHACHA20-POLY1305\n\n - DHE-RSA-AES128-GCM-SHA256\n\n - DHE-RSA-AES256-GCM-SHA384\n\n - DHE-RSA-CHACHA20-POLY1305\n\n - ECDHE-ECDSA-AES128-SHA256\n\n - ECDHE-RSA-AES128-SHA256\n\n - ECDHE-ECDSA-AES128-SHA\n\n - ECDHE-RSA-AES128-SHA\n\n - ECDHE-ECDSA-AES256-SHA384\n\n - ECDHE-RSA-AES256-SHA384\n\n - ECDHE-ECDSA-AES256-SHA\n\n - ECDHE-RSA-AES256-SHA\n\n - DHE-RSA-AES128-SHA256\n\n - DHE-RSA-AES256-SHA256\n\n - AES128-GCM-SHA256\n\n - AES256-GCM-SHA384\n\n - AES128-SHA256\n\n - AES256-SHA256\n\n - AES128-SHA\n\n - AES256-SHA\n\n - DES-CBC3-SHA\n\n minTLSVersion: VersionTLS10",
- "intermediate": "intermediate is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29\n\nand looks like this (yaml):\n\n ciphers:\n\n - TLS_AES_128_GCM_SHA256\n\n - TLS_AES_256_GCM_SHA384\n\n - TLS_CHACHA20_POLY1305_SHA256\n\n - ECDHE-ECDSA-AES128-GCM-SHA256\n\n - ECDHE-RSA-AES128-GCM-SHA256\n\n - ECDHE-ECDSA-AES256-GCM-SHA384\n\n - ECDHE-RSA-AES256-GCM-SHA384\n\n - ECDHE-ECDSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-CHACHA20-POLY1305\n\n - DHE-RSA-AES128-GCM-SHA256\n\n - DHE-RSA-AES256-GCM-SHA384\n\n minTLSVersion: VersionTLS12",
- "modern": "modern is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility\n\nand looks like this (yaml):\n\n ciphers:\n\n - TLS_AES_128_GCM_SHA256\n\n - TLS_AES_256_GCM_SHA384\n\n - TLS_CHACHA20_POLY1305_SHA256\n\n minTLSVersion: VersionTLS13",
- "custom": "custom is a user-defined TLS security profile. Be extremely careful using a custom profile as invalid configurations can be catastrophic. An example custom profile looks like this:\n\n ciphers:\n\n - ECDHE-ECDSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-AES128-GCM-SHA256\n\n - ECDHE-ECDSA-AES128-GCM-SHA256\n\n minTLSVersion: VersionTLS11",
+ "type": "type is one of Old, Intermediate, Modern or Custom. Custom provides the ability to specify individual TLS security profile parameters.\n\nThe profiles are currently based on version 5.0 of the Mozilla Server Side TLS configuration guidelines (released 2019-06-28) with TLS 1.3 ciphers added for forward compatibility. See: https://ssl-config.mozilla.org/guidelines/5.0.json\n\nThe profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be reduced.",
+ "old": "old is a TLS profile for use when services need to be accessed by very old clients or libraries and should be used only as a last resort.\n\nThe cipher list includes TLS 1.3 ciphers for forward compatibility, followed by the \"old\" profile ciphers.\n\nThis profile is equivalent to a Custom profile specified as:\n minTLSVersion: VersionTLS10\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES256-GCM-SHA384\n - ECDHE-RSA-AES256-GCM-SHA384\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - DHE-RSA-AES128-GCM-SHA256\n - DHE-RSA-AES256-GCM-SHA384\n - DHE-RSA-CHACHA20-POLY1305\n - ECDHE-ECDSA-AES128-SHA256\n - ECDHE-RSA-AES128-SHA256\n - ECDHE-ECDSA-AES128-SHA\n - ECDHE-RSA-AES128-SHA\n - ECDHE-ECDSA-AES256-SHA384\n - ECDHE-RSA-AES256-SHA384\n - ECDHE-ECDSA-AES256-SHA\n - ECDHE-RSA-AES256-SHA\n - DHE-RSA-AES128-SHA256\n - DHE-RSA-AES256-SHA256\n - AES128-GCM-SHA256\n - AES256-GCM-SHA384\n - AES128-SHA256\n - AES256-SHA256\n - AES128-SHA\n - AES256-SHA\n - DES-CBC3-SHA",
+ "intermediate": "intermediate is a TLS profile for use when you do not need compatibility with legacy clients and want to remain highly secure while being compatible with most clients currently in use.\n\nThe cipher list includes TLS 1.3 ciphers for forward compatibility, followed by the \"intermediate\" profile ciphers.\n\nThis profile is equivalent to a Custom profile specified as:\n minTLSVersion: VersionTLS12\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES256-GCM-SHA384\n - ECDHE-RSA-AES256-GCM-SHA384\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - DHE-RSA-AES128-GCM-SHA256\n - DHE-RSA-AES256-GCM-SHA384",
+ "modern": "modern is a TLS security profile for use with clients that support TLS 1.3 and do not need backward compatibility for older clients.\n\nThis profile is equivalent to a Custom profile specified as:\n minTLSVersion: VersionTLS13\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256",
+ "custom": "custom is a user-defined TLS security profile. Be extremely careful using a custom profile as invalid configurations can be catastrophic. An example custom profile looks like this:\n\n minTLSVersion: VersionTLS11\n ciphers:\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256",
}
func (TLSSecurityProfile) SwaggerDoc() map[string]string {
diff --git a/vendor/github.com/openshift/api/features.md b/vendor/github.com/openshift/api/features.md
index 6b21a4ae5..0ae89049c 100644
--- a/vendor/github.com/openshift/api/features.md
+++ b/vendor/github.com/openshift/api/features.md
@@ -13,8 +13,8 @@
| IngressControllerDynamicConfigurationManager| | | Enabled | Enabled | | | | |
| NetworkConnect| | | Enabled | Enabled | | | | |
| NewOLMCatalogdAPIV1Metas| | | | Enabled | | | | Enabled |
-| NewOLMOwnSingleNamespace| | | | Enabled | | | | Enabled |
| NewOLMPreflightPermissionChecks| | | | Enabled | | | | Enabled |
+| NoOverlayMode| | | | | | | Enabled | Enabled |
| NoRegistryClusterInstall| | | | Enabled | | | | Enabled |
| ProvisioningRequestAvailable| | | Enabled | Enabled | | | | |
| AWSClusterHostedDNS| | | Enabled | Enabled | | | Enabled | Enabled |
@@ -35,13 +35,16 @@
| ClusterAPIInstallIBMCloud| | | Enabled | Enabled | | | Enabled | Enabled |
| ClusterAPIMachineManagement| | | Enabled | Enabled | | | Enabled | Enabled |
| ClusterMonitoringConfig| | | Enabled | Enabled | | | Enabled | Enabled |
+| ClusterUpdateAcceptRisks| | | Enabled | Enabled | | | Enabled | Enabled |
| ClusterVersionOperatorConfiguration| | | Enabled | Enabled | | | Enabled | Enabled |
+| ConfigurablePKI| | | Enabled | Enabled | | | Enabled | Enabled |
| DNSNameResolver| | | Enabled | Enabled | | | Enabled | Enabled |
| DualReplica| | | Enabled | Enabled | | | Enabled | Enabled |
| DyanmicServiceEndpointIBMCloud| | | Enabled | Enabled | | | Enabled | Enabled |
| EtcdBackendQuota| | | Enabled | Enabled | | | Enabled | Enabled |
| EventTTL| | | Enabled | Enabled | | | Enabled | Enabled |
| Example| | | Enabled | Enabled | | | Enabled | Enabled |
+| ExternalOIDCWithUpstreamParity| | | Enabled | Enabled | | | Enabled | Enabled |
| GCPClusterHostedDNS| | | Enabled | Enabled | | | Enabled | Enabled |
| GCPCustomAPIEndpoints| | | Enabled | Enabled | | | Enabled | Enabled |
| GCPCustomAPIEndpointsInstall| | | Enabled | Enabled | | | Enabled | Enabled |
@@ -61,6 +64,7 @@
| MutableCSINodeAllocatableCount| | | Enabled | Enabled | | | Enabled | Enabled |
| MutatingAdmissionPolicy| | | Enabled | Enabled | | | Enabled | Enabled |
| NewOLM| | Enabled | | Enabled | | Enabled | | Enabled |
+| NewOLMOwnSingleNamespace| | Enabled | | Enabled | | Enabled | | Enabled |
| NewOLMWebhookProviderOpenshiftServiceCA| | Enabled | | Enabled | | Enabled | | Enabled |
| NutanixMultiSubnets| | | Enabled | Enabled | | | Enabled | Enabled |
| OSStreams| | | Enabled | Enabled | | | Enabled | Enabled |
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 c6442186a..d1d5941fa 100644
--- a/vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go
+++ b/vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go
@@ -463,10 +463,11 @@ const (
// 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
+ // The value must start with "h-" followed by either 8 or 17 lowercase hexadecimal characters (0-9 and a-f).
+ // The use of 8 lowercase hexadecimal characters is for older legacy hosts that may not have been migrated to newer format.
+ // Must be either 10 or 19 characters in length.
+ // +kubebuilder:validation:XValidation:rule="self.matches('^h-([0-9a-f]{8}|[0-9a-f]{17})$')",message="hostID must start with 'h-' followed by either 8 or 17 lowercase hexadecimal characters (0-9 and a-f)"
+ // +kubebuilder:validation:MinLength=10
// +kubebuilder:validation:MaxLength=19
// +required
ID string `json:"id,omitempty"`
diff --git a/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go b/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go
index 33f472f92..9510b49fd 100644
--- a/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go
+++ b/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go
@@ -317,6 +317,7 @@ type LifecycleHook struct {
// MachineStatus defines the observed state of Machine
// +openshift:validation:FeatureGateAwareXValidation:featureGate=MachineAPIMigration,rule="!has(oldSelf.synchronizedGeneration) || (has(self.synchronizedGeneration) && self.synchronizedGeneration >= oldSelf.synchronizedGeneration) || (oldSelf.authoritativeAPI == 'Migrating' && self.authoritativeAPI != 'Migrating')",message="synchronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=MachineAPIMigration,rule="has(self.authoritativeAPI) || !has(oldSelf.authoritativeAPI)",message="authoritativeAPI may not be removed once set"
type MachineStatus struct {
// nodeRef will point to the corresponding Node if it exists.
// +optional
diff --git a/vendor/github.com/openshift/api/machine/v1beta1/types_machineset.go b/vendor/github.com/openshift/api/machine/v1beta1/types_machineset.go
index a2343dc39..80cb282b7 100644
--- a/vendor/github.com/openshift/api/machine/v1beta1/types_machineset.go
+++ b/vendor/github.com/openshift/api/machine/v1beta1/types_machineset.go
@@ -112,6 +112,7 @@ type MachineTemplateSpec struct {
// MachineSetStatus defines the observed state of MachineSet
// +openshift:validation:FeatureGateAwareXValidation:featureGate=MachineAPIMigration,rule="!has(oldSelf.synchronizedGeneration) || (has(self.synchronizedGeneration) && self.synchronizedGeneration >= oldSelf.synchronizedGeneration) || (oldSelf.authoritativeAPI == 'Migrating' && self.authoritativeAPI != 'Migrating')",message="synchronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=MachineAPIMigration,rule="has(self.authoritativeAPI) || !has(oldSelf.authoritativeAPI)",message="authoritativeAPI may not be removed once set"
type MachineSetStatus struct {
// replicas is the most recently observed number of replicas.
// +optional
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 903faf94b..093a40076 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
@@ -94,7 +94,7 @@ func (CPUOptions) SwaggerDoc() map[string]string {
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.",
+ "id": "id identifies the AWS Dedicated Host on which the instance must run. The value must start with \"h-\" followed by either 8 or 17 lowercase hexadecimal characters (0-9 and a-f). The use of 8 lowercase hexadecimal characters is for older legacy hosts that may not have been migrated to newer format. Must be either 10 or 19 characters in length.",
}
func (DedicatedHost) SwaggerDoc() map[string]string {
diff --git a/vendor/github.com/openshift/api/openapi/openapi.json b/vendor/github.com/openshift/api/openapi/openapi.json
index c9a1a8d9a..3aa56451c 100644
--- a/vendor/github.com/openshift/api/openapi/openapi.json
+++ b/vendor/github.com/openshift/api/openapi/openapi.json
@@ -4572,6 +4572,19 @@
}
}
},
+ "com.github.openshift.api.config.v1.AcceptRisk": {
+ "description": "AcceptRisk represents a risk that is considered acceptable.",
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "description": "name is the name of the acceptable risk. It must be a non-empty string and must not exceed 256 characters.",
+ "type": "string"
+ }
+ }
+ },
"com.github.openshift.api.config.v1.AdmissionConfig": {
"type": "object",
"properties": {
@@ -5859,6 +5872,18 @@
"default": {},
"$ref": "#/definitions/com.github.openshift.api.config.v1.ClusterVersionCapabilitiesStatus"
},
+ "conditionalUpdateRisks": {
+ "description": "conditionalUpdateRisks contains the list of risks associated with conditionalUpdates. When performing a conditional update, all its associated risks will be compared with the set of accepted risks in the spec.desiredUpdate.acceptRisks field. If all risks for a conditional update are included in the spec.desiredUpdate.acceptRisks set, the conditional update can proceed, otherwise it is blocked. The risk names in the list must be unique. conditionalUpdateRisks must not contain more than 500 entries.",
+ "type": "array",
+ "items": {
+ "default": {},
+ "$ref": "#/definitions/com.github.openshift.api.config.v1.ConditionalUpdateRisk"
+ },
+ "x-kubernetes-list-map-keys": [
+ "name"
+ ],
+ "x-kubernetes-list-type": "map"
+ },
"conditionalUpdates": {
"description": "conditionalUpdates contains the list of updates that may be recommended for this cluster if it meets specific required conditions. Consumers interested in the set of updates that are actually recommended for this cluster should use availableUpdates. This list may be empty if no updates are recommended, if the update service is unavailable, or if an empty or invalid channel has been specified.",
"type": "array",
@@ -6066,6 +6091,15 @@
"default": {},
"$ref": "#/definitions/com.github.openshift.api.config.v1.Release"
},
+ "riskNames": {
+ "description": "riskNames represents the set of the names of conditionalUpdateRisks that are relevant to this update for some clusters. The Applies condition of each conditionalUpdateRisks entry declares if that risk applies to this cluster. A conditional update is accepted only if each of its risks either does not apply to the cluster or is considered acceptable by the cluster administrator. The latter means that the risk names are included in value of the spec.desiredUpdate.acceptRisks field. Entries must be unique and must not exceed 256 characters. riskNames must not contain more than 500 entries.",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "default": ""
+ },
+ "x-kubernetes-list-type": "set"
+ },
"risks": {
"description": "risks represents the range of issues associated with updating to the target release. The cluster-version operator will evaluate all entries, and only recommend the update if there is at least one entry and all entries recommend the update.",
"type": "array",
@@ -6092,6 +6126,18 @@
"matchingRules"
],
"properties": {
+ "conditions": {
+ "description": "conditions represents the observations of the conditional update risk's current status. Known types are: * Applies, for whether the risk applies to the current cluster. The condition's types in the list must be unique. conditions must not contain more than one entry.",
+ "type": "array",
+ "items": {
+ "default": {},
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"
+ },
+ "x-kubernetes-list-map-keys": [
+ "type"
+ ],
+ "x-kubernetes-list-type": "map"
+ },
"matchingRules": {
"description": "matchingRules is a slice of conditions for deciding which clusters match the risk and which do not. The slice is ordered by decreasing precedence. The cluster-version operator will walk the slice in order, and stop after the first it can successfully evaluate. If no condition can be successfully evaluated, the update will not be recommended.",
"type": "array",
@@ -6302,7 +6348,7 @@
"x-kubernetes-list-type": "atomic"
},
"minTLSVersion": {
- "description": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: VersionTLS11\n\nNOTE: currently the highest minTLSVersion allowed is VersionTLS12",
+ "description": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: VersionTLS11",
"type": "string",
"default": ""
}
@@ -6951,26 +6997,6 @@
}
}
},
- "com.github.openshift.api.config.v1.GCPServiceEndpoint": {
- "description": "GCPServiceEndpoint store the configuration of a custom url to override existing defaults of GCP Services.",
- "type": "object",
- "required": [
- "name",
- "url"
- ],
- "properties": {
- "name": {
- "description": "name is the name of the GCP service whose endpoint is being overridden. This must be provided and cannot be empty.\n\nAllowed values are Compute, Container, CloudResourceManager, DNS, File, IAM, ServiceUsage, Storage, and TagManager.\n\nAs an example, when setting the name to Compute all requests made by the caller to the GCP Compute Service will be directed to the endpoint specified in the url field.",
- "type": "string",
- "default": ""
- },
- "url": {
- "description": "url is a fully qualified URI that overrides the default endpoint for a client using the GCP service specified in the name field. url is required, must use the scheme https, must not be more than 253 characters in length, and must be a valid URL according to Go's net/url package (https://pkg.go.dev/net/url#URL)\n\nAn example of a valid endpoint that overrides the Compute Service: \"https://compute-myendpoint1.p.googleapis.com\"",
- "type": "string",
- "default": ""
- }
- }
- },
"com.github.openshift.api.config.v1.GatherConfig": {
"description": "GatherConfig provides data gathering configuration options.",
"type": "object",
@@ -8508,7 +8534,7 @@
}
},
"com.github.openshift.api.config.v1.IntermediateTLSProfile": {
- "description": "IntermediateTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29",
+ "description": "IntermediateTLSProfile is a TLS security profile based on the \"intermediate\" configuration of the Mozilla Server Side TLS configuration guidelines.",
"type": "object"
},
"com.github.openshift.api.config.v1.KMSConfig": {
@@ -8786,7 +8812,7 @@
}
},
"com.github.openshift.api.config.v1.ModernTLSProfile": {
- "description": "ModernTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility",
+ "description": "ModernTLSProfile is a TLS security profile based on the \"modern\" configuration of the Mozilla Server Side TLS configuration guidelines.",
"type": "object"
},
"com.github.openshift.api.config.v1.NamedCertificate": {
@@ -9670,6 +9696,18 @@
"componentName"
],
"x-kubernetes-list-type": "map"
+ },
+ "userValidationRules": {
+ "description": "userValidationRules is an optional field that configures the set of rules used to validate the cluster user identity that was constructed via mapping token claims to user identity attributes. Rules are CEL expressions that must evaluate to 'true' for authentication to succeed. If any rule in the chain of rules evaluates to 'false', authentication will fail. When specified, at least one rule must be specified and no more than 64 rules may be specified.",
+ "type": "array",
+ "items": {
+ "default": {},
+ "$ref": "#/definitions/com.github.openshift.api.config.v1.TokenUserValidationRule"
+ },
+ "x-kubernetes-list-map-keys": [
+ "expression"
+ ],
+ "x-kubernetes-list-type": "map"
}
}
},
@@ -9704,7 +9742,7 @@
}
},
"com.github.openshift.api.config.v1.OldTLSProfile": {
- "description": "OldTLSProfile is a TLS security profile based on: https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility",
+ "description": "OldTLSProfile is a TLS security profile based on the \"old\" configuration of the Mozilla Server Side TLS configuration guidelines.",
"type": "object"
},
"com.github.openshift.api.config.v1.OpenIDClaims": {
@@ -11282,7 +11320,7 @@
"x-kubernetes-list-type": "atomic"
},
"minTLSVersion": {
- "description": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: VersionTLS11\n\nNOTE: currently the highest minTLSVersion allowed is VersionTLS12",
+ "description": "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml):\n\n minTLSVersion: VersionTLS11",
"type": "string",
"default": ""
}
@@ -11293,23 +11331,23 @@
"type": "object",
"properties": {
"custom": {
- "description": "custom is a user-defined TLS security profile. Be extremely careful using a custom profile as invalid configurations can be catastrophic. An example custom profile looks like this:\n\n ciphers:\n\n - ECDHE-ECDSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-AES128-GCM-SHA256\n\n - ECDHE-ECDSA-AES128-GCM-SHA256\n\n minTLSVersion: VersionTLS11",
+ "description": "custom is a user-defined TLS security profile. Be extremely careful using a custom profile as invalid configurations can be catastrophic. An example custom profile looks like this:\n\n minTLSVersion: VersionTLS11\n ciphers:\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256",
"$ref": "#/definitions/com.github.openshift.api.config.v1.CustomTLSProfile"
},
"intermediate": {
- "description": "intermediate is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29\n\nand looks like this (yaml):\n\n ciphers:\n\n - TLS_AES_128_GCM_SHA256\n\n - TLS_AES_256_GCM_SHA384\n\n - TLS_CHACHA20_POLY1305_SHA256\n\n - ECDHE-ECDSA-AES128-GCM-SHA256\n\n - ECDHE-RSA-AES128-GCM-SHA256\n\n - ECDHE-ECDSA-AES256-GCM-SHA384\n\n - ECDHE-RSA-AES256-GCM-SHA384\n\n - ECDHE-ECDSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-CHACHA20-POLY1305\n\n - DHE-RSA-AES128-GCM-SHA256\n\n - DHE-RSA-AES256-GCM-SHA384\n\n minTLSVersion: VersionTLS12",
+ "description": "intermediate is a TLS profile for use when you do not need compatibility with legacy clients and want to remain highly secure while being compatible with most clients currently in use.\n\nThe cipher list includes TLS 1.3 ciphers for forward compatibility, followed by the \"intermediate\" profile ciphers.\n\nThis profile is equivalent to a Custom profile specified as:\n minTLSVersion: VersionTLS12\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES256-GCM-SHA384\n - ECDHE-RSA-AES256-GCM-SHA384\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - DHE-RSA-AES128-GCM-SHA256\n - DHE-RSA-AES256-GCM-SHA384",
"$ref": "#/definitions/com.github.openshift.api.config.v1.IntermediateTLSProfile"
},
"modern": {
- "description": "modern is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility\n\nand looks like this (yaml):\n\n ciphers:\n\n - TLS_AES_128_GCM_SHA256\n\n - TLS_AES_256_GCM_SHA384\n\n - TLS_CHACHA20_POLY1305_SHA256\n\n minTLSVersion: VersionTLS13",
+ "description": "modern is a TLS security profile for use with clients that support TLS 1.3 and do not need backward compatibility for older clients.\n\nThis profile is equivalent to a Custom profile specified as:\n minTLSVersion: VersionTLS13\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256",
"$ref": "#/definitions/com.github.openshift.api.config.v1.ModernTLSProfile"
},
"old": {
- "description": "old is a TLS security profile based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility\n\nand looks like this (yaml):\n\n ciphers:\n\n - TLS_AES_128_GCM_SHA256\n\n - TLS_AES_256_GCM_SHA384\n\n - TLS_CHACHA20_POLY1305_SHA256\n\n - ECDHE-ECDSA-AES128-GCM-SHA256\n\n - ECDHE-RSA-AES128-GCM-SHA256\n\n - ECDHE-ECDSA-AES256-GCM-SHA384\n\n - ECDHE-RSA-AES256-GCM-SHA384\n\n - ECDHE-ECDSA-CHACHA20-POLY1305\n\n - ECDHE-RSA-CHACHA20-POLY1305\n\n - DHE-RSA-AES128-GCM-SHA256\n\n - DHE-RSA-AES256-GCM-SHA384\n\n - DHE-RSA-CHACHA20-POLY1305\n\n - ECDHE-ECDSA-AES128-SHA256\n\n - ECDHE-RSA-AES128-SHA256\n\n - ECDHE-ECDSA-AES128-SHA\n\n - ECDHE-RSA-AES128-SHA\n\n - ECDHE-ECDSA-AES256-SHA384\n\n - ECDHE-RSA-AES256-SHA384\n\n - ECDHE-ECDSA-AES256-SHA\n\n - ECDHE-RSA-AES256-SHA\n\n - DHE-RSA-AES128-SHA256\n\n - DHE-RSA-AES256-SHA256\n\n - AES128-GCM-SHA256\n\n - AES256-GCM-SHA384\n\n - AES128-SHA256\n\n - AES256-SHA256\n\n - AES128-SHA\n\n - AES256-SHA\n\n - DES-CBC3-SHA\n\n minTLSVersion: VersionTLS10",
+ "description": "old is a TLS profile for use when services need to be accessed by very old clients or libraries and should be used only as a last resort.\n\nThe cipher list includes TLS 1.3 ciphers for forward compatibility, followed by the \"old\" profile ciphers.\n\nThis profile is equivalent to a Custom profile specified as:\n minTLSVersion: VersionTLS10\n ciphers:\n - TLS_AES_128_GCM_SHA256\n - TLS_AES_256_GCM_SHA384\n - TLS_CHACHA20_POLY1305_SHA256\n - ECDHE-ECDSA-AES128-GCM-SHA256\n - ECDHE-RSA-AES128-GCM-SHA256\n - ECDHE-ECDSA-AES256-GCM-SHA384\n - ECDHE-RSA-AES256-GCM-SHA384\n - ECDHE-ECDSA-CHACHA20-POLY1305\n - ECDHE-RSA-CHACHA20-POLY1305\n - DHE-RSA-AES128-GCM-SHA256\n - DHE-RSA-AES256-GCM-SHA384\n - DHE-RSA-CHACHA20-POLY1305\n - ECDHE-ECDSA-AES128-SHA256\n - ECDHE-RSA-AES128-SHA256\n - ECDHE-ECDSA-AES128-SHA\n - ECDHE-RSA-AES128-SHA\n - ECDHE-ECDSA-AES256-SHA384\n - ECDHE-RSA-AES256-SHA384\n - ECDHE-ECDSA-AES256-SHA\n - ECDHE-RSA-AES256-SHA\n - DHE-RSA-AES128-SHA256\n - DHE-RSA-AES256-SHA256\n - AES128-GCM-SHA256\n - AES256-GCM-SHA384\n - AES128-SHA256\n - AES256-SHA256\n - AES128-SHA\n - AES256-SHA\n - DES-CBC3-SHA",
"$ref": "#/definitions/com.github.openshift.api.config.v1.OldTLSProfile"
},
"type": {
- "description": "type is one of Old, Intermediate, Modern or Custom. Custom provides the ability to specify individual TLS security profile parameters. Old, Intermediate and Modern are TLS security profiles based on:\n\nhttps://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations\n\nThe profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be reduced.\n\nNote that the Modern profile is currently not supported because it is not yet well adopted by common software libraries.",
+ "description": "type is one of Old, Intermediate, Modern or Custom. Custom provides the ability to specify individual TLS security profile parameters.\n\nThe profiles are currently based on version 5.0 of the Mozilla Server Side TLS configuration guidelines (released 2019-06-28) with TLS 1.3 ciphers added for forward compatibility. See: https://ssl-config.mozilla.org/guidelines/5.0.json\n\nThe profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be reduced.",
"type": "string",
"default": ""
}
@@ -11465,18 +11503,41 @@
}
}
},
+ "com.github.openshift.api.config.v1.TokenClaimValidationCELRule": {
+ "type": "object",
+ "required": [
+ "expression",
+ "message"
+ ],
+ "properties": {
+ "expression": {
+ "description": "expression is a CEL expression evaluated against token claims. expression is required, must be at least 1 character in length and must not exceed 1024 characters. The expression must return a boolean value where 'true' signals a valid token and 'false' an invalid one.",
+ "type": "string"
+ },
+ "message": {
+ "description": "message is a required human-readable message to be logged by the Kubernetes API server if the CEL expression defined in 'expression' fails. message must be at least 1 character in length and must not exceed 256 characters.",
+ "type": "string"
+ }
+ }
+ },
"com.github.openshift.api.config.v1.TokenClaimValidationRule": {
+ "description": "TokenClaimValidationRule represents a validation rule based on token claims. If type is RequiredClaim, requiredClaim must be set. If Type is CEL, CEL must be set and RequiredClaim must be omitted.",
"type": "object",
"required": [
"type"
],
"properties": {
+ "cel": {
+ "description": "cel holds the CEL expression and message for validation. Must be set when Type is \"CEL\", and forbidden otherwise.",
+ "default": {},
+ "$ref": "#/definitions/com.github.openshift.api.config.v1.TokenClaimValidationCELRule"
+ },
"requiredClaim": {
- "description": "requiredClaim is an optional field that configures the required claim and value that the Kubernetes API server will use to validate if an incoming JWT is valid for this identity provider.",
+ "description": "requiredClaim allows configuring a required claim name and its expected value. This field is required when `type` is set to RequiredClaim, and must be omitted when `type` is set to any other value. The Kubernetes API server uses this field to validate if an incoming JWT is valid for this identity provider.",
"$ref": "#/definitions/com.github.openshift.api.config.v1.TokenRequiredClaim"
},
"type": {
- "description": "type is an optional field that configures the type of the validation rule.\n\nAllowed values are 'RequiredClaim' and omitted (not provided or an empty string).\n\nWhen set to 'RequiredClaim', the Kubernetes API server will be configured to validate that the incoming JWT contains the required claim and that its value matches the required value.\n\nDefaults to 'RequiredClaim'.",
+ "description": "type is an optional field that configures the type of the validation rule.\n\nAllowed values are \"RequiredClaim\" and \"CEL\".\n\nWhen set to 'RequiredClaim', the Kubernetes API server will be configured to validate that the incoming JWT contains the required claim and that its value matches the required value.\n\nWhen set to 'CEL', the Kubernetes API server will be configured to validate the incoming JWT against the configured CEL expression.",
"type": "string",
"default": ""
}
@@ -11518,6 +11579,10 @@
},
"x-kubernetes-list-type": "set"
},
+ "discoveryURL": {
+ "description": "discoveryURL is an optional field that, if specified, overrides the default discovery endpoint used to retrieve OIDC configuration metadata. By default, the discovery URL is derived from `issuerURL` as \"{issuerURL}/.well-known/openid-configuration\".\n\nThe discoveryURL must be a valid absolute HTTPS URL. It must not contain query parameters, user information, or fragments. Additionally, it must differ from the value of `url` (ignoring trailing slashes). The discoveryURL value must be at least 1 character long and no longer than 2048 characters.",
+ "type": "string"
+ },
"issuerCertificateAuthority": {
"description": "issuerCertificateAuthority is an optional field that configures the certificate authority, used by the Kubernetes API server, to validate the connection to the identity provider when fetching discovery information.\n\nWhen not specified, the system trust is used.\n\nWhen specified, it must reference a ConfigMap in the openshift-config namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt' key in the data field of the ConfigMap.",
"default": {},
@@ -11549,10 +11614,40 @@
}
}
},
+ "com.github.openshift.api.config.v1.TokenUserValidationRule": {
+ "description": "TokenUserValidationRule provides a CEL-based rule used to validate a token subject. Each rule contains a CEL expression that is evaluated against the token’s claims.",
+ "type": "object",
+ "required": [
+ "expression",
+ "message"
+ ],
+ "properties": {
+ "expression": {
+ "description": "expression is a required CEL expression that performs a validation on cluster user identity attributes like username, groups, etc. The expression must evaluate to a boolean value. When the expression evaluates to 'true', the cluster user identity is considered valid. When the expression evaluates to 'false', the cluster user identity is not considered valid. expression must be at least 1 character in length and must not exceed 1024 characters.",
+ "type": "string"
+ },
+ "message": {
+ "description": "message is a required human-readable message to be logged by the Kubernetes API server if the CEL expression defined in 'expression' fails. message must be at least 1 character in length and must not exceed 256 characters.",
+ "type": "string"
+ }
+ }
+ },
"com.github.openshift.api.config.v1.Update": {
"description": "Update represents an administrator update request.",
"type": "object",
"properties": {
+ "acceptRisks": {
+ "description": "acceptRisks is an optional set of names of conditional update risks that are considered acceptable. A conditional update is performed only if all of its risks are acceptable. This list may contain entries that apply to current, previous or future updates. The entries therefore may not map directly to a risk in .status.conditionalUpdateRisks. acceptRisks must not contain more than 1000 entries. Entries in this list must be unique.",
+ "type": "array",
+ "items": {
+ "default": {},
+ "$ref": "#/definitions/com.github.openshift.api.config.v1.AcceptRisk"
+ },
+ "x-kubernetes-list-map-keys": [
+ "name"
+ ],
+ "x-kubernetes-list-type": "map"
+ },
"architecture": {
"description": "architecture is an optional field that indicates the desired value of the cluster architecture. In this context cluster architecture means either a single architecture or a multi architecture. architecture can only be set to Multi thereby only allowing updates from single to multi architecture. If architecture is set, image cannot be set and version must be set. Valid values are 'Multi' and empty.",
"type": "string",
@@ -11587,7 +11682,7 @@
],
"properties": {
"acceptedRisks": {
- "description": "acceptedRisks records risks which were accepted to initiate the update. For example, it may menition an Upgradeable=False or missing signature that was overridden via desiredUpdate.force, or an update that was initiated despite not being in the availableUpdates set of recommended update targets.",
+ "description": "acceptedRisks records risks which were accepted to initiate the update. For example, it may mention an Upgradeable=False or missing signature that was overridden via desiredUpdate.force, or an update that was initiated despite not being in the availableUpdates set of recommended update targets.",
"type": "string"
},
"completionTime": {
@@ -23640,7 +23735,7 @@
],
"properties": {
"id": {
- "description": "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.",
+ "description": "id identifies the AWS Dedicated Host on which the instance must run. The value must start with \"h-\" followed by either 8 or 17 lowercase hexadecimal characters (0-9 and a-f). The use of 8 lowercase hexadecimal characters is for older legacy hosts that may not have been migrated to newer format. Must be either 10 or 19 characters in length.",
"type": "string"
}
}
@@ -28604,6 +28699,24 @@
}
}
},
+ "com.github.openshift.api.operator.v1.BGPManagedConfig": {
+ "description": "BGPManagedConfig contains configuration options for BGP when routing is \"Managed\".",
+ "type": "object",
+ "required": [
+ "bgpTopology"
+ ],
+ "properties": {
+ "asNumber": {
+ "description": "asNumber is the 2-byte or 4-byte Autonomous System Number (ASN) to be used in the generated FRR configuration. Valid values are 1 to 4294967295. When omitted, this defaults to 64512.",
+ "type": "integer",
+ "format": "int64"
+ },
+ "bgpTopology": {
+ "description": "bgpTopology defines the BGP topology to be used. Allowed values are \"FullMesh\". When set to \"FullMesh\", every node deploys a BGP router, forming a BGP full mesh. This field is required when BGPManagedConfig is specified.",
+ "type": "string"
+ }
+ }
+ },
"com.github.openshift.api.operator.v1.BootImageSkewEnforcementConfig": {
"description": "BootImageSkewEnforcementConfig is used to configure how boot image version skew is enforced on the cluster.",
"type": "object",
@@ -28861,7 +28974,7 @@
],
"properties": {
"name": {
- "description": "name is the unique name of a capability. Available capabilities are LightspeedButton and GettingStartedBanner.",
+ "description": "name is the unique name of a capability. Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.",
"type": "string",
"default": ""
},
@@ -29510,7 +29623,7 @@
"type": "string"
},
"capabilities": {
- "description": "capabilities defines an array of capabilities that can be interacted with in the console UI. Each capability defines a visual state that can be interacted with the console to render in the UI. Available capabilities are LightspeedButton and GettingStartedBanner. Each of the available capabilities may appear only once in the list.",
+ "description": "capabilities defines an array of capabilities that can be interacted with in the console UI. Each capability defines a visual state that can be interacted with the console to render in the UI. Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour. Each of the available capabilities may appear only once in the list.",
"type": "array",
"items": {
"default": {},
@@ -32975,6 +33088,24 @@
}
}
},
+ "com.github.openshift.api.operator.v1.NoOverlayOptions": {
+ "description": "NoOverlayOptions contains configuration options for networks operating in no-overlay mode.",
+ "type": "object",
+ "required": [
+ "outboundSNAT",
+ "routing"
+ ],
+ "properties": {
+ "outboundSNAT": {
+ "description": "outboundSNAT defines the SNAT behavior for outbound traffic from pods. Allowed values are \"Enabled\" and \"Disabled\". When set to \"Enabled\", SNAT is performed on outbound traffic from pods. When set to \"Disabled\", SNAT is not performed and pod IPs are preserved in outbound traffic. This field is required when the network operates in no-overlay mode. This field must be set to \"Enabled\" at installation time and can be changed afterwards.",
+ "type": "string"
+ },
+ "routing": {
+ "description": "routing specifies whether the pod network routing is managed by OVN-Kubernetes or users. Allowed values are \"Managed\" and \"Unmanaged\". When set to \"Managed\", OVN-Kubernetes manages the pod network routing configuration through BGP. When set to \"Unmanaged\", users are responsible for configuring the pod network routing. This field is required when the network operates in no-overlay mode. This field is immutable once set.",
+ "type": "string"
+ }
+ }
+ },
"com.github.openshift.api.operator.v1.NodeDisruptionPolicyClusterStatus": {
"description": "NodeDisruptionPolicyClusterStatus is the type for the status object, rendered by the controller as a merge of cluster defaults and user provided policies",
"type": "object",
@@ -33491,6 +33622,20 @@
"description": "ovnKubernetesConfig contains the configuration parameters for networks using the ovn-kubernetes network project",
"type": "object",
"properties": {
+ "bgpManagedConfig": {
+ "description": "bgpManagedConfig configures the BGP properties for networks (default network or CUDNs) in no-overlay mode that specify routing=\"Managed\" in their NoOverlayOptions. It is required when DefaultNetworkNoOverlayOptions.Routing is set to \"Managed\". When omitted, this means the user does not configure BGP for managed routing. This field can be set once, either at installation time or on day 2, and is immutable thereafter.",
+ "default": {},
+ "$ref": "#/definitions/com.github.openshift.api.operator.v1.BGPManagedConfig"
+ },
+ "defaultNetworkNoOverlayOptions": {
+ "description": "defaultNetworkNoOverlayOptions contains configuration for no-overlay mode for the default network. It is required when DefaultNetworkTransport is \"NoOverlay\". When omitted, this means the user does not configure no-overlay mode options.",
+ "default": {},
+ "$ref": "#/definitions/com.github.openshift.api.operator.v1.NoOverlayOptions"
+ },
+ "defaultNetworkTransport": {
+ "description": "defaultNetworkTransport describes the transport protocol for east-west traffic for the default network. Allowed values are \"NoOverlay\" and \"Geneve\". When set to \"NoOverlay\", the default network operates in no-overlay mode. When set to \"Geneve\", the default network uses Geneve overlay. When omitted, this means the user has no opinion and the platform chooses a reasonable default which is subject to change over time. The current default is \"Geneve\". This field can only be set at installation time and cannot be changed afterwards.",
+ "type": "string"
+ },
"egressIPConfig": {
"description": "egressIPConfig holds the configuration for EgressIP options.",
"default": {},
diff --git a/vendor/github.com/openshift/api/operator/v1/types_console.go b/vendor/github.com/openshift/api/operator/v1/types_console.go
index e030a65c8..35795b2b7 100644
--- a/vendor/github.com/openshift/api/operator/v1/types_console.go
+++ b/vendor/github.com/openshift/api/operator/v1/types_console.go
@@ -107,6 +107,9 @@ const (
// gettingStartedBanner is the name of the 'Getting started resources' banner in the console UI Overview page.
GettingStartedBanner ConsoleCapabilityName = "GettingStartedBanner"
+
+ // guidedTour is the name of the 'Guided Tour' feature in console UI.
+ GuidedTour ConsoleCapabilityName = "GuidedTour"
)
// CapabilityState defines the state of the capability in the console UI.
@@ -134,8 +137,8 @@ type CapabilityVisibility struct {
// Capabilities contains set of UI capabilities and their state in the console UI.
type Capability struct {
// name is the unique name of a capability.
- // Available capabilities are LightspeedButton and GettingStartedBanner.
- // +kubebuilder:validation:Enum:="LightspeedButton";"GettingStartedBanner"
+ // Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.
+ // +kubebuilder:validation:Enum:="LightspeedButton";"GettingStartedBanner";"GuidedTour"
// +required
Name ConsoleCapabilityName `json:"name"`
// visibility defines the visibility state of the capability.
@@ -281,10 +284,10 @@ type ConsoleCustomization struct {
// capabilities defines an array of capabilities that can be interacted with in the console UI.
// Each capability defines a visual state that can be interacted with the console to render in the UI.
- // Available capabilities are LightspeedButton and GettingStartedBanner.
+ // Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.
// Each of the available capabilities may appear only once in the list.
// +kubebuilder:validation:MinItems=1
- // +kubebuilder:validation:MaxItems=2
+ // +kubebuilder:validation:MaxItems=3
// +listType=map
// +listMapKey=name
// +optional
diff --git a/vendor/github.com/openshift/api/operator/v1/types_network.go b/vendor/github.com/openshift/api/operator/v1/types_network.go
index 111240eec..0bebd1788 100644
--- a/vendor/github.com/openshift/api/operator/v1/types_network.go
+++ b/vendor/github.com/openshift/api/operator/v1/types_network.go
@@ -397,8 +397,19 @@ type OpenShiftSDNConfig struct {
EnableUnidling *bool `json:"enableUnidling,omitempty"`
}
+// Maintainer note for NoOverlayMode feature (TechPreview):
+// When NoOverlayMode graduates to GA, add '+kubebuilder:default=Geneve' to the DefaultNetworkTransport
+// field so the default is visible in the CRD schema and applied by the API server automatically.
+// Currently CNO handles the default (treating omitted as Geneve) because the field is feature-gated
+// and existing ungated tests don't expect this field in outputs.
+
// ovnKubernetesConfig contains the configuration parameters for networks
// using the ovn-kubernetes network project
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=NoOverlayMode,rule="!has(self.defaultNetworkTransport) || self.defaultNetworkTransport != 'NoOverlay' || has(self.defaultNetworkNoOverlayOptions)",message="defaultNetworkNoOverlayOptions is required when defaultNetworkTransport is NoOverlay"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=NoOverlayMode,rule="!has(self.defaultNetworkNoOverlayOptions) || self.defaultNetworkNoOverlayOptions.routing != 'Managed' || has(self.bgpManagedConfig)",message="bgpManagedConfig is required when defaultNetworkNoOverlayOptions.routing is Managed"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=NoOverlayMode,rule="!has(oldSelf.defaultNetworkTransport) || oldSelf.defaultNetworkTransport == '' || has(self.defaultNetworkTransport)",message="defaultNetworkTransport cannot be removed once set to a non-empty value"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=NoOverlayMode,rule="!has(oldSelf.defaultNetworkNoOverlayOptions) || has(self.defaultNetworkNoOverlayOptions)",message="defaultNetworkNoOverlayOptions cannot be removed once set"
+// +openshift:validation:FeatureGateAwareXValidation:featureGate=NoOverlayMode,rule="!has(oldSelf.bgpManagedConfig) || oldSelf.bgpManagedConfig.bgpTopology == '' || has(self.bgpManagedConfig)",message="bgpManagedConfig cannot be removed once configured"
type OVNKubernetesConfig struct {
// mtu is the MTU to use for the tunnel interface. This must be 100
// bytes smaller than the uplink mtu.
@@ -468,6 +479,36 @@ type OVNKubernetesConfig struct {
// +openshift:enable:FeatureGate=RouteAdvertisements
// +optional
RouteAdvertisements RouteAdvertisementsEnablement `json:"routeAdvertisements,omitempty"`
+
+ // defaultNetworkTransport describes the transport protocol for east-west traffic for the default network.
+ // Allowed values are "NoOverlay" and "Geneve".
+ // When set to "NoOverlay", the default network operates in no-overlay mode.
+ // When set to "Geneve", the default network uses Geneve overlay.
+ // When omitted, this means the user has no opinion and the platform chooses a reasonable default which is subject to change over time.
+ // The current default is "Geneve".
+ // This field can only be set at installation time and cannot be changed afterwards.
+ // +openshift:enable:FeatureGate=NoOverlayMode
+ // +kubebuilder:validation:Enum=NoOverlay;Geneve
+ // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="defaultNetworkTransport can only be set at installation time"
+ // +optional
+ DefaultNetworkTransport TransportOption `json:"defaultNetworkTransport,omitempty"`
+
+ // defaultNetworkNoOverlayOptions contains configuration for no-overlay mode for the default network.
+ // It is required when DefaultNetworkTransport is "NoOverlay".
+ // When omitted, this means the user does not configure no-overlay mode options.
+ // +openshift:enable:FeatureGate=NoOverlayMode
+ // +optional
+ DefaultNetworkNoOverlayOptions NoOverlayOptions `json:"defaultNetworkNoOverlayOptions,omitzero,omitempty"`
+
+ // bgpManagedConfig configures the BGP properties for networks (default network or CUDNs)
+ // in no-overlay mode that specify routing="Managed" in their NoOverlayOptions.
+ // It is required when DefaultNetworkNoOverlayOptions.Routing is set to "Managed".
+ // When omitted, this means the user does not configure BGP for managed routing.
+ // This field can be set once, either at installation time or on day 2, and is immutable thereafter.
+ // +openshift:enable:FeatureGate=NoOverlayMode
+ // +kubebuilder:validation:XValidation:rule="!oldSelf.hasValue() || oldSelf.value().bgpTopology == '' || self == oldSelf.value()",message="bgpManagedConfig can only be set once and is immutable thereafter",optionalOldSelf=true
+ // +optional
+ BGPManagedConfig BGPManagedConfig `json:"bgpManagedConfig,omitzero,omitempty"`
}
type IPv4OVNKubernetesConfig struct {
@@ -898,3 +939,81 @@ type AdditionalRoutingCapabilities struct {
// +kubebuilder:validation:XValidation:rule="self.all(x, self.exists_one(y, x == y))"
Providers []RoutingCapabilitiesProvider `json:"providers"`
}
+
+// TransportOption is the type for network transport options
+type TransportOption string
+
+// SNATOption is the type for SNAT configuration options
+type SNATOption string
+
+// RoutingOption is the type for routing configuration options
+type RoutingOption string
+
+// BGPTopology is the type for BGP topology configuration
+type BGPTopology string
+
+const (
+ // TransportOptionNoOverlay indicates the network operates in no-overlay mode
+ TransportOptionNoOverlay TransportOption = "NoOverlay"
+ // TransportOptionGeneve indicates the network uses Geneve overlay
+ TransportOptionGeneve TransportOption = "Geneve"
+
+ // SNATEnabled indicates outbound SNAT is enabled
+ SNATEnabled SNATOption = "Enabled"
+ // SNATDisabled indicates outbound SNAT is disabled
+ SNATDisabled SNATOption = "Disabled"
+
+ // RoutingManaged indicates routing is managed by OVN-Kubernetes
+ RoutingManaged RoutingOption = "Managed"
+ // RoutingUnmanaged indicates routing is managed by users
+ RoutingUnmanaged RoutingOption = "Unmanaged"
+
+ // BGPTopologyFullMesh indicates every node deploys a BGP router, forming a BGP full mesh
+ BGPTopologyFullMesh BGPTopology = "FullMesh"
+)
+
+// NoOverlayOptions contains configuration options for networks operating in no-overlay mode.
+type NoOverlayOptions struct {
+ // outboundSNAT defines the SNAT behavior for outbound traffic from pods.
+ // Allowed values are "Enabled" and "Disabled".
+ // When set to "Enabled", SNAT is performed on outbound traffic from pods.
+ // When set to "Disabled", SNAT is not performed and pod IPs are preserved in outbound traffic.
+ // This field is required when the network operates in no-overlay mode.
+ // This field must be set to "Enabled" at installation time and can be changed afterwards.
+ // +kubebuilder:validation:Enum=Enabled;Disabled
+ // +kubebuilder:validation:XValidation:rule="!oldSelf.hasValue() ? self == 'Enabled' : true",message="outboundSNAT must be Enabled at installation time and can be changed on day 2",optionalOldSelf=true
+ // +required
+ OutboundSNAT SNATOption `json:"outboundSNAT,omitempty"`
+
+ // routing specifies whether the pod network routing is managed by OVN-Kubernetes or users.
+ // Allowed values are "Managed" and "Unmanaged".
+ // When set to "Managed", OVN-Kubernetes manages the pod network routing configuration through BGP.
+ // When set to "Unmanaged", users are responsible for configuring the pod network routing.
+ // This field is required when the network operates in no-overlay mode.
+ // This field is immutable once set.
+ // +kubebuilder:validation:Enum=Managed;Unmanaged
+ // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="routing is immutable once set"
+ // +required
+ Routing RoutingOption `json:"routing,omitempty"`
+}
+
+// BGPManagedConfig contains configuration options for BGP when routing is "Managed".
+type BGPManagedConfig struct {
+ // asNumber is the 2-byte or 4-byte Autonomous System Number (ASN)
+ // to be used in the generated FRR configuration.
+ // Valid values are 1 to 4294967295.
+ // When omitted, this defaults to 64512.
+ // +kubebuilder:validation:Minimum=1
+ // +kubebuilder:validation:Maximum=4294967295
+ // +kubebuilder:default=64512
+ // +optional
+ ASNumber int64 `json:"asNumber,omitempty"`
+
+ // bgpTopology defines the BGP topology to be used.
+ // Allowed values are "FullMesh".
+ // When set to "FullMesh", every node deploys a BGP router, forming a BGP full mesh.
+ // This field is required when BGPManagedConfig is specified.
+ // +kubebuilder:validation:Enum=FullMesh
+ // +required
+ BGPTopology BGPTopology `json:"bgpTopology,omitempty"`
+}
diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go
index 3bc6b81de..30f437b45 100644
--- a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go
+++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go
@@ -390,6 +390,22 @@ func (in *AzureDiskEncryptionSet) DeepCopy() *AzureDiskEncryptionSet {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *BGPManagedConfig) DeepCopyInto(out *BGPManagedConfig) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPManagedConfig.
+func (in *BGPManagedConfig) DeepCopy() *BGPManagedConfig {
+ if in == nil {
+ return nil
+ }
+ out := new(BGPManagedConfig)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *BootImageSkewEnforcementConfig) DeepCopyInto(out *BootImageSkewEnforcementConfig) {
*out = *in
@@ -3665,6 +3681,22 @@ func (in *NetworkStatus) DeepCopy() *NetworkStatus {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NoOverlayOptions) DeepCopyInto(out *NoOverlayOptions) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NoOverlayOptions.
+func (in *NoOverlayOptions) DeepCopy() *NoOverlayOptions {
+ if in == nil {
+ return nil
+ }
+ out := new(NoOverlayOptions)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *NodeDisruptionPolicyClusterStatus) DeepCopyInto(out *NodeDisruptionPolicyClusterStatus) {
*out = *in
@@ -4158,6 +4190,8 @@ func (in *OVNKubernetesConfig) DeepCopyInto(out *OVNKubernetesConfig) {
*out = new(IPv6OVNKubernetesConfig)
**out = **in
}
+ out.DefaultNetworkNoOverlayOptions = in.DefaultNetworkNoOverlayOptions
+ out.BGPManagedConfig = in.BGPManagedConfig
return
}
diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml
index e7c94e286..c35554548 100644
--- a/vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml
+++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml
@@ -330,6 +330,7 @@ networks.operator.openshift.io:
FeatureGates:
- AdditionalRoutingCapabilities
- NetworkLiveMigration
+ - NoOverlayMode
- RouteAdvertisements
FilenameOperatorName: network
FilenameOperatorOrdering: "01"
diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go
index 06096a6c8..b5faf9fe2 100644
--- a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go
+++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go
@@ -210,7 +210,7 @@ func (AddPage) SwaggerDoc() map[string]string {
var map_Capability = map[string]string{
"": "Capabilities contains set of UI capabilities and their state in the console UI.",
- "name": "name is the unique name of a capability. Available capabilities are LightspeedButton and GettingStartedBanner.",
+ "name": "name is the unique name of a capability. Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.",
"visibility": "visibility defines the visibility state of the capability.",
}
@@ -259,7 +259,7 @@ func (ConsoleConfigRoute) SwaggerDoc() map[string]string {
var map_ConsoleCustomization = map[string]string{
"": "ConsoleCustomization defines a list of optional configuration for the console UI. Ensure that Logos and CustomLogoFile cannot be set at the same time.",
"logos": "logos is used to replace the OpenShift Masthead and Favicon logos in the console UI with custom logos. logos is an optional field that allows a list of logos. Only one of logos or customLogoFile can be set at a time. If logos is set, customLogoFile must be unset. When specified, there must be at least one entry and no more than 2 entries. Each type must appear only once in the list.",
- "capabilities": "capabilities defines an array of capabilities that can be interacted with in the console UI. Each capability defines a visual state that can be interacted with the console to render in the UI. Available capabilities are LightspeedButton and GettingStartedBanner. Each of the available capabilities may appear only once in the list.",
+ "capabilities": "capabilities defines an array of capabilities that can be interacted with in the console UI. Each capability defines a visual state that can be interacted with the console to render in the UI. Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour. Each of the available capabilities may appear only once in the list.",
"brand": "brand is the default branding of the web console which can be overridden by providing the brand field. There is a limited set of specific brand options. This field controls elements of the console such as the logo. Invalid value will prevent a console rollout.",
"documentationBaseURL": "documentationBaseURL links to external documentation are shown in various sections of the web console. Providing documentationBaseURL will override the default documentation URL. Invalid value will prevent a console rollout.",
"customProductName": "customProductName is the name that will be displayed in page titles, logo alt text, and the about dialog instead of the normal OpenShift product name.",
@@ -1669,6 +1669,16 @@ func (AdditionalRoutingCapabilities) SwaggerDoc() map[string]string {
return map_AdditionalRoutingCapabilities
}
+var map_BGPManagedConfig = map[string]string{
+ "": "BGPManagedConfig contains configuration options for BGP when routing is \"Managed\".",
+ "asNumber": "asNumber is the 2-byte or 4-byte Autonomous System Number (ASN) to be used in the generated FRR configuration. Valid values are 1 to 4294967295. When omitted, this defaults to 64512.",
+ "bgpTopology": "bgpTopology defines the BGP topology to be used. Allowed values are \"FullMesh\". When set to \"FullMesh\", every node deploys a BGP router, forming a BGP full mesh. This field is required when BGPManagedConfig is specified.",
+}
+
+func (BGPManagedConfig) SwaggerDoc() map[string]string {
+ return map_BGPManagedConfig
+}
+
var map_ClusterNetworkEntry = map[string]string{
"": "ClusterNetworkEntry is a subnet from which to allocate PodIPs. A network of size HostPrefix (in CIDR notation) will be allocated when nodes join the cluster. If the HostPrefix field is not used by the plugin, it can be left unset. Not all network providers support multiple ClusterNetworks",
}
@@ -1896,20 +1906,33 @@ func (NetworkStatus) SwaggerDoc() map[string]string {
return map_NetworkStatus
}
+var map_NoOverlayOptions = map[string]string{
+ "": "NoOverlayOptions contains configuration options for networks operating in no-overlay mode.",
+ "outboundSNAT": "outboundSNAT defines the SNAT behavior for outbound traffic from pods. Allowed values are \"Enabled\" and \"Disabled\". When set to \"Enabled\", SNAT is performed on outbound traffic from pods. When set to \"Disabled\", SNAT is not performed and pod IPs are preserved in outbound traffic. This field is required when the network operates in no-overlay mode. This field must be set to \"Enabled\" at installation time and can be changed afterwards.",
+ "routing": "routing specifies whether the pod network routing is managed by OVN-Kubernetes or users. Allowed values are \"Managed\" and \"Unmanaged\". When set to \"Managed\", OVN-Kubernetes manages the pod network routing configuration through BGP. When set to \"Unmanaged\", users are responsible for configuring the pod network routing. This field is required when the network operates in no-overlay mode. This field is immutable once set.",
+}
+
+func (NoOverlayOptions) SwaggerDoc() map[string]string {
+ return map_NoOverlayOptions
+}
+
var map_OVNKubernetesConfig = map[string]string{
- "": "ovnKubernetesConfig contains the configuration parameters for networks using the ovn-kubernetes network project",
- "mtu": "mtu is the MTU to use for the tunnel interface. This must be 100 bytes smaller than the uplink mtu. Default is 1400",
- "genevePort": "geneve port is the UDP port to be used by geneve encapulation. Default is 6081",
- "hybridOverlayConfig": "hybridOverlayConfig configures an additional overlay network for peers that are not using OVN.",
- "ipsecConfig": "ipsecConfig enables and configures IPsec for pods on the pod network within the cluster.",
- "policyAuditConfig": "policyAuditConfig is the configuration for network policy audit events. If unset, reported defaults are used.",
- "gatewayConfig": "gatewayConfig holds the configuration for node gateway options.",
- "v4InternalSubnet": "v4InternalSubnet is a v4 subnet used internally by ovn-kubernetes in case the default one is being already used by something else. It must not overlap with any other subnet being used by OpenShift or by the node network. The size of the subnet must be larger than the number of nodes. Default is 100.64.0.0/16",
- "v6InternalSubnet": "v6InternalSubnet is a v6 subnet used internally by ovn-kubernetes in case the default one is being already used by something else. It must not overlap with any other subnet being used by OpenShift or by the node network. The size of the subnet must be larger than the number of nodes. Default is fd98::/64",
- "egressIPConfig": "egressIPConfig holds the configuration for EgressIP options.",
- "ipv4": "ipv4 allows users to configure IP settings for IPv4 connections. When ommitted, this means no opinions and the default configuration is used. Check individual fields within ipv4 for details of default values.",
- "ipv6": "ipv6 allows users to configure IP settings for IPv6 connections. When ommitted, this means no opinions and the default configuration is used. Check individual fields within ipv4 for details of default values.",
- "routeAdvertisements": "routeAdvertisements determines if the functionality to advertise cluster network routes through a dynamic routing protocol, such as BGP, is enabled or not. This functionality is configured through the ovn-kubernetes RouteAdvertisements CRD. Requires the 'FRR' routing capability provider to be enabled as an additional routing capability. Allowed values are \"Enabled\", \"Disabled\" and ommited. 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 \"Disabled\".",
+ "": "ovnKubernetesConfig contains the configuration parameters for networks using the ovn-kubernetes network project",
+ "mtu": "mtu is the MTU to use for the tunnel interface. This must be 100 bytes smaller than the uplink mtu. Default is 1400",
+ "genevePort": "geneve port is the UDP port to be used by geneve encapulation. Default is 6081",
+ "hybridOverlayConfig": "hybridOverlayConfig configures an additional overlay network for peers that are not using OVN.",
+ "ipsecConfig": "ipsecConfig enables and configures IPsec for pods on the pod network within the cluster.",
+ "policyAuditConfig": "policyAuditConfig is the configuration for network policy audit events. If unset, reported defaults are used.",
+ "gatewayConfig": "gatewayConfig holds the configuration for node gateway options.",
+ "v4InternalSubnet": "v4InternalSubnet is a v4 subnet used internally by ovn-kubernetes in case the default one is being already used by something else. It must not overlap with any other subnet being used by OpenShift or by the node network. The size of the subnet must be larger than the number of nodes. Default is 100.64.0.0/16",
+ "v6InternalSubnet": "v6InternalSubnet is a v6 subnet used internally by ovn-kubernetes in case the default one is being already used by something else. It must not overlap with any other subnet being used by OpenShift or by the node network. The size of the subnet must be larger than the number of nodes. Default is fd98::/64",
+ "egressIPConfig": "egressIPConfig holds the configuration for EgressIP options.",
+ "ipv4": "ipv4 allows users to configure IP settings for IPv4 connections. When ommitted, this means no opinions and the default configuration is used. Check individual fields within ipv4 for details of default values.",
+ "ipv6": "ipv6 allows users to configure IP settings for IPv6 connections. When ommitted, this means no opinions and the default configuration is used. Check individual fields within ipv4 for details of default values.",
+ "routeAdvertisements": "routeAdvertisements determines if the functionality to advertise cluster network routes through a dynamic routing protocol, such as BGP, is enabled or not. This functionality is configured through the ovn-kubernetes RouteAdvertisements CRD. Requires the 'FRR' routing capability provider to be enabled as an additional routing capability. Allowed values are \"Enabled\", \"Disabled\" and ommited. 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 \"Disabled\".",
+ "defaultNetworkTransport": "defaultNetworkTransport describes the transport protocol for east-west traffic for the default network. Allowed values are \"NoOverlay\" and \"Geneve\". When set to \"NoOverlay\", the default network operates in no-overlay mode. When set to \"Geneve\", the default network uses Geneve overlay. When omitted, this means the user has no opinion and the platform chooses a reasonable default which is subject to change over time. The current default is \"Geneve\". This field can only be set at installation time and cannot be changed afterwards.",
+ "defaultNetworkNoOverlayOptions": "defaultNetworkNoOverlayOptions contains configuration for no-overlay mode for the default network. It is required when DefaultNetworkTransport is \"NoOverlay\". When omitted, this means the user does not configure no-overlay mode options.",
+ "bgpManagedConfig": "bgpManagedConfig configures the BGP properties for networks (default network or CUDNs) in no-overlay mode that specify routing=\"Managed\" in their NoOverlayOptions. It is required when DefaultNetworkNoOverlayOptions.Routing is set to \"Managed\". When omitted, this means the user does not configure BGP for managed routing. This field can be set once, either at installation time or on day 2, and is immutable thereafter.",
}
func (OVNKubernetesConfig) SwaggerDoc() map[string]string {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 47a5b97db..52d45a07a 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -62,7 +62,7 @@ github.com/modern-go/reflect2
# github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
## explicit
github.com/munnerz/goautoneg
-# github.com/openshift/api v0.0.0-20260107103503-6d35063ca179
+# github.com/openshift/api v0.0.0-20260107103503-6d35063ca179 => github.com/ricky-rav/api v0.0.0-20260119191252-1622757cb08b
## explicit; go 1.24.0
github.com/openshift/api
github.com/openshift/api/apiextensions
@@ -531,3 +531,4 @@ sigs.k8s.io/structured-merge-diff/v6/value
# sigs.k8s.io/yaml v1.6.0
## explicit; go 1.22
sigs.k8s.io/yaml
+# github.com/openshift/api => github.com/ricky-rav/api v0.0.0-20260119191252-1622757cb08b