Merge pull request #3613 from zishen/master

update lifted files to k8s 1.26
This commit is contained in:
karmada-bot 2023-07-19 10:38:32 +08:00 committed by GitHub
commit d27faeac95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 401 additions and 352 deletions

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go
package lifted package lifted
@ -31,7 +31,8 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L57-L61 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L57-L61
// +lifted:changed
// IsQuotaHugePageResourceName returns true if the resource name has the quota // IsQuotaHugePageResourceName returns true if the resource name has the quota
// related huge page resource prefix. // related huge page resource prefix.
@ -39,7 +40,9 @@ func IsQuotaHugePageResourceName(name corev1.ResourceName) bool {
return strings.HasPrefix(string(name), corev1.ResourceHugePagesPrefix) || strings.HasPrefix(string(name), corev1.ResourceRequestsHugePagesPrefix) return strings.HasPrefix(string(name), corev1.ResourceHugePagesPrefix) || strings.HasPrefix(string(name), corev1.ResourceRequestsHugePagesPrefix)
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L212-L232 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L210-L230
// +lifted:changed
var standardQuotaResources = sets.NewString( var standardQuotaResources = sets.NewString(
string(corev1.ResourceCPU), string(corev1.ResourceCPU),
string(corev1.ResourceMemory), string(corev1.ResourceMemory),
@ -62,7 +65,7 @@ var standardQuotaResources = sets.NewString(
string(corev1.ResourceServicesLoadBalancers), string(corev1.ResourceServicesLoadBalancers),
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L234-L238 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L232-L236
// IsStandardQuotaResourceName returns true if the resource is known to // IsStandardQuotaResourceName returns true if the resource is known to
// the quota tracking system // the quota tracking system
@ -70,7 +73,9 @@ func IsStandardQuotaResourceName(str string) bool {
return standardQuotaResources.Has(str) || IsQuotaHugePageResourceName(corev1.ResourceName(str)) return standardQuotaResources.Has(str) || IsQuotaHugePageResourceName(corev1.ResourceName(str))
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L240-L261 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L238-L259
// +lifted:changed
var standardResources = sets.NewString( var standardResources = sets.NewString(
string(corev1.ResourceCPU), string(corev1.ResourceCPU),
string(corev1.ResourceMemory), string(corev1.ResourceMemory),
@ -94,14 +99,16 @@ var standardResources = sets.NewString(
string(corev1.ResourceServicesLoadBalancers), string(corev1.ResourceServicesLoadBalancers),
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L263-L266 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L261-L264
// IsStandardResourceName returns true if the resource is known to the system // IsStandardResourceName returns true if the resource is known to the system
func IsStandardResourceName(str string) bool { func IsStandardResourceName(str string) bool {
return standardResources.Has(str) || IsQuotaHugePageResourceName(corev1.ResourceName(str)) return standardResources.Has(str) || IsQuotaHugePageResourceName(corev1.ResourceName(str))
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L268-L278 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#LL266-L276
// +lifted:changed
var integerResources = sets.NewString( var integerResources = sets.NewString(
string(corev1.ResourcePods), string(corev1.ResourcePods),
string(corev1.ResourceQuotas), string(corev1.ResourceQuotas),
@ -114,7 +121,7 @@ var integerResources = sets.NewString(
string(corev1.ResourceServicesLoadBalancers), string(corev1.ResourceServicesLoadBalancers),
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L280-L283 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L278-L281
// IsIntegerResourceName returns true if the resource is measured in integer values // IsIntegerResourceName returns true if the resource is measured in integer values
func IsIntegerResourceName(str string) bool { func IsIntegerResourceName(str string) bool {

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers_test.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers_test.go
package lifted package lifted

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go
package lifted package lifted
@ -28,7 +28,7 @@ import (
"k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L31-L46 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L31-L46
// +lifted:changed // +lifted:changed
// IsExtendedResourceName returns true if: // IsExtendedResourceName returns true if:
@ -48,7 +48,7 @@ func IsExtendedResourceName(name corev1.ResourceName) bool {
return true return true
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L48-L51 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L48-L51
// IsPrefixedNativeResource returns true if the resource name is in the // IsPrefixedNativeResource returns true if the resource name is in the
// *kubernetes.io/ namespace. // *kubernetes.io/ namespace.
@ -56,7 +56,7 @@ func IsPrefixedNativeResource(name corev1.ResourceName) bool {
return strings.Contains(string(name), corev1.ResourceDefaultNamespacePrefix) return strings.Contains(string(name), corev1.ResourceDefaultNamespacePrefix)
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L54-L60 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L54-L60
// IsNativeResource returns true if the resource name is in the // IsNativeResource returns true if the resource name is in the
// *kubernetes.io/ namespace. Partially-qualified (unprefixed) names are // *kubernetes.io/ namespace. Partially-qualified (unprefixed) names are
@ -66,7 +66,7 @@ func IsNativeResource(name corev1.ResourceName) bool {
IsPrefixedNativeResource(name) IsPrefixedNativeResource(name)
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L62-L66 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L62-L66
// IsHugePageResourceName returns true if the resource name has the huge page // IsHugePageResourceName returns true if the resource name has the huge page
// resource prefix. // resource prefix.
@ -74,7 +74,7 @@ func IsHugePageResourceName(name corev1.ResourceName) bool {
return strings.HasPrefix(string(name), corev1.ResourceHugePagesPrefix) return strings.HasPrefix(string(name), corev1.ResourceHugePagesPrefix)
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L132-L135 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L132-L135
// IsAttachableVolumeResourceName returns true when the resource name is prefixed in attachable volume // IsAttachableVolumeResourceName returns true when the resource name is prefixed in attachable volume
func IsAttachableVolumeResourceName(name corev1.ResourceName) bool { func IsAttachableVolumeResourceName(name corev1.ResourceName) bool {

View File

@ -55,6 +55,7 @@ func TestIsNativeResource(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
tc := tc
t.Run(fmt.Sprintf("resourceName input=%s, expected value=%v", tc.resourceName, tc.expectVal), func(t *testing.T) { t.Run(fmt.Sprintf("resourceName input=%s, expected value=%v", tc.resourceName, tc.expectVal), func(t *testing.T) {
t.Parallel() t.Parallel()
v := IsNativeResource(tc.resourceName) v := IsNativeResource(tc.resourceName)

View File

@ -16,13 +16,13 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L59-L60 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L59
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L62 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L61
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L225-L228 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L237-L240
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L311-L318 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L320-L327
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5036-L5054 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5522-L5540
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5073-L5084 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5559-L5570
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5651-L5661 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L6167-L6177
package lifted package lifted
@ -35,23 +35,23 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L59 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L58
const isNegativeErrorMsg string = apimachineryvalidation.IsNegativeErrorMsg const isNegativeErrorMsg string = apimachineryvalidation.IsNegativeErrorMsg
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L60 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L59
const isInvalidQuotaResource string = `must be a standard resource for quota` const isInvalidQuotaResource string = `must be a standard resource for quota`
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L62 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L61
const isNotIntegerErrorMsg string = `must be an integer` const isNotIntegerErrorMsg string = `must be an integer`
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L225-L228 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L237-L240
// ValidatePodName can be used to check whether the given pod name is valid. // ValidatePodName can be used to check whether the given pod name is valid.
// Prefix indicates this name will be used as part of generation, in which case // Prefix indicates this name will be used as part of generation, in which case
// trailing dashes are allowed. // trailing dashes are allowed.
var ValidatePodName = apimachineryvalidation.NameIsDNSSubdomain var ValidatePodName = apimachineryvalidation.NameIsDNSSubdomain
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L311-L318 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L320-L327
// ValidateNonnegativeQuantity Validates that a Quantity is not negative // ValidateNonnegativeQuantity Validates that a Quantity is not negative
func ValidateNonnegativeQuantity(value resource.Quantity, fldPath *field.Path) field.ErrorList { func ValidateNonnegativeQuantity(value resource.Quantity, fldPath *field.Path) field.ErrorList {
@ -62,7 +62,7 @@ func ValidateNonnegativeQuantity(value resource.Quantity, fldPath *field.Path) f
return allErrs return allErrs
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5036-L5054 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5522-L5540
// +lifted:changed // +lifted:changed
// Validate compute resource typename. // Validate compute resource typename.
@ -85,7 +85,7 @@ func validateResourceName(value string, fldPath *field.Path) field.ErrorList {
return allErrs return allErrs
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5073-L5084 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5559-L5570
// +lifted:changed // +lifted:changed
// ValidateResourceQuotaResourceName Validate resource names that can go in a resource quota // ValidateResourceQuotaResourceName Validate resource names that can go in a resource quota
@ -101,7 +101,7 @@ func ValidateResourceQuotaResourceName(value string, fldPath *field.Path) field.
return allErrs return allErrs
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5651-L5661 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L6167-L6177
// +lifted:changed // +lifted:changed
// ValidateResourceQuantityValue enforces that specified quantity is valid for specified resource // ValidateResourceQuantityValue enforces that specified quantity is valid for specified resource

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation_test.go#L15475-L15518 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation_test.go#L15475-L15518
package lifted package lifted

View File

@ -16,9 +16,6 @@ limitations under the License.
// This code is lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// However the code has been revised for using Lister instead of API interface. // However the code has been revised for using Lister instead of API interface.
// For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/controller_utils.go#L1003-L1012
// https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go
package lifted package lifted
@ -27,7 +24,7 @@ import (
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality" apiequality "k8s.io/apimachinery/pkg/api/equality"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
@ -36,10 +33,10 @@ import (
// PodListFunc returns the Pod slice from the Pod namespace and a selector. // PodListFunc returns the Pod slice from the Pod namespace and a selector.
type PodListFunc func(string, labels.Selector) ([]*corev1.Pod, error) type PodListFunc func(string, labels.Selector) ([]*corev1.Pod, error)
// ReplicaSetListFunc returns the ReplicaSet slice from the ReplicaSet namespace and a selector. // RsListFunc returns the ReplicaSet from the ReplicaSet namespace and the List metav1.ListOptions.
type ReplicaSetListFunc func(string, labels.Selector) ([]*appsv1.ReplicaSet, error) type RsListFunc func(string, labels.Selector) ([]*appsv1.ReplicaSet, error)
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/controller_utils.go#L1003-L1012 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L1004-L1015
// ReplicaSetsByCreationTimestamp sorts a list of ReplicaSet by creation timestamp, using their names as a tie breaker. // ReplicaSetsByCreationTimestamp sorts a list of ReplicaSet by creation timestamp, using their names as a tie breaker.
type ReplicaSetsByCreationTimestamp []*appsv1.ReplicaSet type ReplicaSetsByCreationTimestamp []*appsv1.ReplicaSet
@ -53,14 +50,14 @@ func (o ReplicaSetsByCreationTimestamp) Less(i, j int) bool {
return o[i].CreationTimestamp.Before(&o[j].CreationTimestamp) return o[i].CreationTimestamp.Before(&o[j].CreationTimestamp)
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L569-L594 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L536-L561
// +lifted:changed // +lifted:changed
// ListReplicaSetsByDeployment returns a slice of RSes the given deployment targets. // ListReplicaSetsByDeployment returns a slice of RSes the given deployment targets.
// Note that this does NOT attempt to reconcile ControllerRef (adopt/orphan), // Note that this does NOT attempt to reconcile ControllerRef (adopt/orphan),
// because only the controller itself should do that. // because only the controller itself should do that.
// However, it does filter out anything whose ControllerRef doesn't match. // However, it does filter out anything whose ControllerRef doesn't match.
func ListReplicaSetsByDeployment(deployment *appsv1.Deployment, f ReplicaSetListFunc) ([]*appsv1.ReplicaSet, error) { func ListReplicaSetsByDeployment(deployment *appsv1.Deployment, getRSList RsListFunc) ([]*appsv1.ReplicaSet, error) {
// TODO: Right now we list replica sets by their labels. We should list them by selector, i.e. the replica set's selector // TODO: Right now we list replica sets by their labels. We should list them by selector, i.e. the replica set's selector
// should be a superset of the deployment's selector, see https://github.com/kubernetes/kubernetes/issues/19830. // should be a superset of the deployment's selector, see https://github.com/kubernetes/kubernetes/issues/19830.
namespace := deployment.Namespace namespace := deployment.Namespace
@ -68,7 +65,7 @@ func ListReplicaSetsByDeployment(deployment *appsv1.Deployment, f ReplicaSetList
if err != nil { if err != nil {
return nil, err return nil, err
} }
all, err := f(namespace, selector) all, err := getRSList(namespace, selector)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -82,7 +79,7 @@ func ListReplicaSetsByDeployment(deployment *appsv1.Deployment, f ReplicaSetList
return owned, nil return owned, nil
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L596-L628 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L563C1-L595
// +lifted:changed // +lifted:changed
// ListPodsByRS returns a list of pods the given deployment targets. // ListPodsByRS returns a list of pods the given deployment targets.
@ -120,7 +117,7 @@ func ListPodsByRS(deployment *appsv1.Deployment, rsList []*appsv1.ReplicaSet, f
return owned, nil return owned, nil
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L630-L642 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L597-L609
// EqualIgnoreHash returns true if two given podTemplateSpec are equal, ignoring the diff in value of Labels[pod-template-hash] // EqualIgnoreHash returns true if two given podTemplateSpec are equal, ignoring the diff in value of Labels[pod-template-hash]
// We ignore pod-template-hash because: // We ignore pod-template-hash because:
@ -133,15 +130,15 @@ func EqualIgnoreHash(template1, template2 *corev1.PodTemplateSpec) bool {
// Remove hash labels from template.Labels before comparing // Remove hash labels from template.Labels before comparing
delete(t1Copy.Labels, appsv1.DefaultDeploymentUniqueLabelKey) delete(t1Copy.Labels, appsv1.DefaultDeploymentUniqueLabelKey)
delete(t2Copy.Labels, appsv1.DefaultDeploymentUniqueLabelKey) delete(t2Copy.Labels, appsv1.DefaultDeploymentUniqueLabelKey)
return equality.Semantic.DeepEqual(t1Copy, t2Copy) return apiequality.Semantic.DeepEqual(t1Copy, t2Copy)
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L536-L544 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/test/utils/deployment.go#L179-L187
// +lifted:changed // +lifted:changed
// GetNewReplicaSet returns a replica set that matches the intent of the given deployment; get ReplicaSetList from client interface. // GetNewReplicaSet returns a replica set that matches the intent of the given deployment; get ReplicaSetList from client interface.
// Returns nil if the new replica set doesn't exist yet. // Returns nil if the new replica set doesn't exist yet.
func GetNewReplicaSet(deployment *appsv1.Deployment, f ReplicaSetListFunc) (*appsv1.ReplicaSet, error) { func GetNewReplicaSet(deployment *appsv1.Deployment, f RsListFunc) (*appsv1.ReplicaSet, error) {
rsList, err := ListReplicaSetsByDeployment(deployment, f) rsList, err := ListReplicaSetsByDeployment(deployment, f)
if err != nil { if err != nil {
return nil, err return nil, err
@ -149,7 +146,7 @@ func GetNewReplicaSet(deployment *appsv1.Deployment, f ReplicaSetListFunc) (*app
return FindNewReplicaSet(deployment, rsList), nil return FindNewReplicaSet(deployment, rsList), nil
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L644-L658 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L611-L625
// FindNewReplicaSet returns the new RS this given deployment targets (the one with the same pod template). // FindNewReplicaSet returns the new RS this given deployment targets (the one with the same pod template).
func FindNewReplicaSet(deployment *appsv1.Deployment, rsList []*appsv1.ReplicaSet) *appsv1.ReplicaSet { func FindNewReplicaSet(deployment *appsv1.Deployment, rsList []*appsv1.ReplicaSet) *appsv1.ReplicaSet {

View File

@ -15,7 +15,41 @@ import (
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#LL151C1-L186C2 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L40-L49
func newDControllerRef(d *appsv1.Deployment) *metav1.OwnerReference {
isController := true
return &metav1.OwnerReference{
APIVersion: "apps/v1",
Kind: "Deployment",
Name: d.GetName(),
UID: d.GetUID(),
Controller: &isController,
}
}
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L51-L67
// +lifted:changed
// generateRS creates a replica set, with the input deployment's template as its template
func generateRS(deployment appsv1.Deployment) appsv1.ReplicaSet {
template := deployment.Spec.Template.DeepCopy()
return appsv1.ReplicaSet{
ObjectMeta: metav1.ObjectMeta{
UID: "test",
Name: names.SimpleNameGenerator.GenerateName("replicaset"),
Labels: template.Labels,
OwnerReferences: []metav1.OwnerReference{*newDControllerRef(&deployment)},
},
Spec: appsv1.ReplicaSetSpec{
Replicas: new(int32),
Template: *template,
Selector: &metav1.LabelSelector{MatchLabels: template.Labels},
},
}
}
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L73-L108
// generateDeployment creates a deployment, with the input image as its template // generateDeployment creates a deployment, with the input image as its template
func generateDeployment(image string) appsv1.Deployment { func generateDeployment(image string) appsv1.Deployment {
@ -54,41 +88,7 @@ func generateDeployment(image string) appsv1.Deployment {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#LL129C1-L145C2 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L110-L121
// +lifted:changed
// generateRS creates a replica set, with the input deployment's template as its template
func generateRS(deployment appsv1.Deployment) appsv1.ReplicaSet {
template := deployment.Spec.Template.DeepCopy()
return appsv1.ReplicaSet{
ObjectMeta: metav1.ObjectMeta{
UID: "test",
Name: names.SimpleNameGenerator.GenerateName("replicaset"),
Labels: template.Labels,
OwnerReferences: []metav1.OwnerReference{*newDControllerRef(&deployment)},
},
Spec: appsv1.ReplicaSetSpec{
Replicas: new(int32),
Template: *template,
Selector: &metav1.LabelSelector{MatchLabels: template.Labels},
},
}
}
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#LL118C1-L127C2
func newDControllerRef(d *appsv1.Deployment) *metav1.OwnerReference {
isController := true
return &metav1.OwnerReference{
APIVersion: "apps/v1",
Kind: "Deployment",
Name: d.GetName(),
UID: d.GetUID(),
Controller: &isController,
}
}
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#L326
func generatePodTemplateSpec(name, nodeName string, annotations, labels map[string]string) corev1.PodTemplateSpec { func generatePodTemplateSpec(name, nodeName string, annotations, labels map[string]string) corev1.PodTemplateSpec {
return corev1.PodTemplateSpec{ return corev1.PodTemplateSpec{
@ -197,7 +197,7 @@ func TestListReplicaSetsByDeployment(t *testing.T) {
name string name string
deployment *appsv1.Deployment deployment *appsv1.Deployment
rs *appsv1.ReplicaSet rs *appsv1.ReplicaSet
rsListFunc ReplicaSetListFunc rsListFunc RsListFunc
wantErr bool wantErr bool
wantRS bool wantRS bool
}{ }{
@ -431,7 +431,7 @@ func TestListPodsByRS(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#L339 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L123-L214
func TestEqualIgnoreHash(t *testing.T) { func TestEqualIgnoreHash(t *testing.T) {
tests := []struct { tests := []struct {
@ -601,7 +601,7 @@ func TestGetNewReplicaSet(t *testing.T) {
}) })
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#L432 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L216-L267
func TestFindNewReplicaSet(t *testing.T) { func TestFindNewReplicaSet(t *testing.T) {
now := metav1.Now() now := metav1.Now()

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector.go#L696-L732 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector.go#L741-L777
package lifted package lifted
@ -26,7 +26,7 @@ import (
"k8s.io/klog/v2" "k8s.io/klog/v2"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector.go#L696-L732 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector.go#L741-L777
// GetDeletableResources returns all resources from discoveryClient that the // GetDeletableResources returns all resources from discoveryClient that the
// garbage collector should recognize and work with. More specifically, all // garbage collector should recognize and work with. More specifically, all
@ -39,9 +39,9 @@ func GetDeletableResources(discoveryClient discovery.ServerResourcesInterface) m
preferredResources, err := discoveryClient.ServerPreferredResources() preferredResources, err := discoveryClient.ServerPreferredResources()
if err != nil { if err != nil {
if discovery.IsGroupDiscoveryFailedError(err) { if discovery.IsGroupDiscoveryFailedError(err) {
klog.Warningf("Failed to discover some groups: %v", err.(*discovery.ErrGroupDiscoveryFailed).Groups) klog.Warningf("failed to discover some groups: %v", err.(*discovery.ErrGroupDiscoveryFailed).Groups)
} else { } else {
klog.Warningf("Failed to discover preferred resources: %v", err) klog.Warningf("failed to discover preferred resources: %v", err)
} }
} }
if preferredResources == nil { if preferredResources == nil {
@ -55,7 +55,7 @@ func GetDeletableResources(discoveryClient discovery.ServerResourcesInterface) m
for _, rl := range deletableResources { for _, rl := range deletableResources {
gv, err := schema.ParseGroupVersion(rl.GroupVersion) gv, err := schema.ParseGroupVersion(rl.GroupVersion)
if err != nil { if err != nil {
klog.Warningf("Ignore invalid discovered resource %q: %v", rl.GroupVersion, err) klog.Warningf("ignoring invalid discovered resource %q: %v", rl.GroupVersion, err)
continue continue
} }
for i := range rl.APIResources { for i := range rl.APIResources {

View File

@ -13,8 +13,8 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector_test.go#L943-L990 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector_test.go#L943-L990
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector_test.go#L707-L797 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector_test.go#L707-L797
package lifted package lifted
@ -29,39 +29,7 @@ import (
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector_test.go#L943-L990 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector_test.go#L712-L802
type fakeServerResources struct {
PreferredResources []*metav1.APIResourceList
Error error
Lock sync.Mutex
InterfaceUsedCount int
}
func (*fakeServerResources) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) {
return nil, nil
}
// Deprecated: use ServerGroupsAndResources instead.
func (*fakeServerResources) ServerResources() ([]*metav1.APIResourceList, error) {
return nil, nil
}
func (*fakeServerResources) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
return nil, nil, nil
}
func (f *fakeServerResources) ServerPreferredResources() ([]*metav1.APIResourceList, error) {
f.Lock.Lock()
defer f.Lock.Unlock()
f.InterfaceUsedCount++
return f.PreferredResources, f.Error
}
func (*fakeServerResources) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) {
return nil, nil
}
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector_test.go#L707-L797
// TestGetDeletableResources ensures GetDeletableResources always returns // TestGetDeletableResources ensures GetDeletableResources always returns
// something usable regardless of discovery output. // something usable regardless of discovery output.
@ -154,3 +122,36 @@ func TestGetDeletableResources(t *testing.T) {
} }
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector_test.go#L948-L990
type fakeServerResources struct {
PreferredResources []*metav1.APIResourceList
Error error
Lock sync.Mutex
InterfaceUsedCount int
}
func (*fakeServerResources) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) {
return nil, nil
}
// Deprecated: use ServerGroupsAndResources instead.
func (*fakeServerResources) ServerResources() ([]*metav1.APIResourceList, error) {
return nil, nil
}
func (*fakeServerResources) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
return nil, nil, nil
}
func (f *fakeServerResources) ServerPreferredResources() ([]*metav1.APIResourceList, error) {
f.Lock.Lock()
defer f.Lock.Unlock()
f.InterfaceUsedCount++
return f.PreferredResources, f.Error
}
func (*fakeServerResources) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) {
return nil, nil
}

View File

@ -4,108 +4,109 @@
package lifted package lifted
/* /*
| lifted file | source file | const/var/type/func | changed | | lifted file | source file | const/var/type/func | changed |
|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|---------| |--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|---------|
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L57-L61 | func IsQuotaHugePageResourceName | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L57-L61 | func IsQuotaHugePageResourceName | Y |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L212-L232 | var standardQuotaResources | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L210-L230 | var standardQuotaResources | Y |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L234-L238 | func IsStandardQuotaResourceName | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L232-L236 | func IsStandardQuotaResourceName | N |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L240-L261 | var standardResources | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L238-L259 | var standardResources | Y |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L263-L266 | func IsStandardResourceName | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L261-L264 | func IsStandardResourceName | N |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L268-L278 | var integerResources | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#LL266-L276 | var integerResources | Y |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L280-L283 | func IsIntegerResourceName | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/helper/helpers.go#L278-L281 | func IsIntegerResourceName | N |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/core/validation/validation.go | type ValidateNameFunc | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/core/validation/validation.go | type ValidateNameFunc | N |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/core/helper/helpers.go | var standardFinalizers | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/core/helper/helpers.go | var standardFinalizers | N |
| corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/staging/src/k8s.io/apimachinery/pkg/api/validation/generic.go | func NameIsDNSSubdomain | N | | corehelpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/staging/src/k8s.io/apimachinery/pkg/api/validation/generic.go | func NameIsDNSSubdomain | N |
| corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L31-L46 | func IsExtendedResourceName | Y | | corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L31-L46 | func IsExtendedResourceName | Y |
| corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L48-L51 | func IsPrefixedNativeResource | N | | corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L48-L51 | func IsPrefixedNativeResource | N |
| corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L54-L60 | func IsNativeResource | N | | corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L54-L60 | func IsNativeResource | N |
| corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L62-L66 | func IsHugePageResourceName | N | | corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L62-L66 | func IsHugePageResourceName | N |
| corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/v1/helper/helpers.go#L132-L135 | func IsAttachableVolumeResourceName | N | | corev1helpers.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/v1/helper/helpers.go#L132-L135 | func IsAttachableVolumeResourceName | N |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L59 | const isNegativeErrorMsg | N | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L58 | const isNegativeErrorMsg | N |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L60 | const isInvalidQuotaResource | N | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L59 | const isInvalidQuotaResource | N |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L62 | const isNotIntegerErrorMsg | N | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L61 | const isNotIntegerErrorMsg | N |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L225-L228 | var ValidatePodName | N | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L237-L240 | var ValidatePodName | N |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L311-L318 | func ValidateNonnegativeQuantity | N | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L320-L327 | func ValidateNonnegativeQuantity | N |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5036-L5054 | func validateResourceName | Y | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5522-L5540 | func validateResourceName | Y |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5073-L5084 | func ValidateResourceQuotaResourceName | Y | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5559-L5570 | func ValidateResourceQuotaResourceName | Y |
| corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/apis/core/validation/validation.go#L5651-L5661 | func ValidateResourceQuantityValue | Y | | corevalidation.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L6167-L6177 | func ValidateResourceQuantityValue | Y |
| deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/controller_utils.go#L1003-L1012 | type ReplicaSetsByCreationTimestamp | N | | deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L1004-L1015 | type ReplicaSetsByCreationTimestamp | N |
| deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L569-L594 | func ListReplicaSetsByDeployment | Y | | deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L536-L561 | func ListReplicaSetsByDeployment | Y |
| deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L596-L628 | func ListPodsByRS | Y | | deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L563C1-L595 | func ListPodsByRS | Y |
| deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L630-L642 | func EqualIgnoreHash | N | | deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L597-L609 | func EqualIgnoreHash | N |
| deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L536-L544 | func GetNewReplicaSet | Y | | deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/test/utils/deployment.go#L179-L187 | func GetNewReplicaSet | Y |
| deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util.go#L644-L658 | func FindNewReplicaSet | N | | deployment.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util.go#L611-L625 | func FindNewReplicaSet | N |
| deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#LL151C1-L186C2 | func generateDeployment | N | | deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L40-L49 | func newDControllerRef | N |
| deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#LL129C1-L145C2 | func generateRS | Y | | deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L51-L67 | func generateRS | Y |
| deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#LL118C1-L127C2 | func newDControllerRef | N | | deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L73-L108 | func generateDeployment | N |
| deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#L326 | func generatePodTemplateSpec | N | | deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L110-L121 | func generatePodTemplateSpec | N |
| deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#L339 | func TestEqualIgnoreHash | N | | deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L123-L214 | func TestEqualIgnoreHash | N |
| deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.22/pkg/controller/deployment/util/deployment_util_test.go#L432 | func TestFindNewReplicaSet | N | | deployment_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/deployment/util/deployment_util_test.go#L216-L267 | func TestFindNewReplicaSet | N |
| discovery.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector.go#L696-L732 | func GetDeletableResources | N | | discovery.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector.go#L741-L777 | func GetDeletableResources | N |
| discovery_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector_test.go#L943-L990 | type fakeServerResources | N | | discovery_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector_test.go#L712-L802 | func TestGetDeletableResources | N |
| discovery_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/garbagecollector/garbagecollector_test.go#L707-L797 | func TestGetDeletableResources | N | | discovery_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/garbagecollector/garbagecollector_test.go#L948-L990 | type fakeServerResources | N |
| genutils.go | https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils.go | func OutDir | N | | genutils.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils.go | func OutDir | N |
| genutils_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go#L23-L28 | func TestValidDir | N | | genutils_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go#L23-L28 | func TestValidDir | N |
| genutils_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go#L30-L35 | func TestInvalidDir | N | | genutils_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go#L30-L35 | func TestInvalidDir | N |
| genutils_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go#L37-L42 | func TestNotDir | N | | genutils_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go#L37-L42 | func TestNotDir | N |
| nodeselector.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L365-L397 | func NodeSelectorRequirementsAsSelector | N | | nodeaffinity.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity.go#L203-L242 | func NodeSelectorRequirementsAsSelector | Y |
| nodeselector_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers_test.go#L138-L200 | func TestNodeSelectorRequirementsAsSelector | N | | nodeaffinity_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity_test.go#L297-L360 | func TestNodeSelectorRequirementsAsSelector | N |
| objectwatcher.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/util/propagatedversion.go#L35-L43 | func ObjectVersion | N | | objectwatcher.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/util/propagatedversion.go#L35-L43 | func ObjectVersion | N |
| objectwatcher.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/util/propagatedversion.go#L45-L59 | func ObjectNeedsUpdate | N | | objectwatcher.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/util/propagatedversion.go#L45-L59 | func ObjectNeedsUpdate | N |
| objectwatcher.go | https://github.com/kubernetes-retired/kubefed/blob/master/pkg/controller/util/meta.go#L82-L103 | func objectMetaObjEquivalent | Y | | objectwatcher.go | https://github.com/kubernetes-retired/kubefed/blob/master/pkg/controller/util/meta.go#L82-L103 | func objectMetaObjEquivalent | Y |
| podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L466-L472 | func getPodsLabelSet | N | | podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L466-L472 | func getPodsLabelSet | N |
| podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L474-L478 | func getPodsFinalizers | N | | podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L474-L478 | func getPodsFinalizers | N |
| podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L480-L486 | func getPodsAnnotationSet | N | | podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L480-L486 | func getPodsAnnotationSet | N |
| podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L488-L495 | func getPodsPrefix | N | | podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L488-L495 | func getPodsPrefix | N |
| podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L539-L562 | func GetPodFromTemplate | Y | | podtemplate.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L539-L562 | func GetPodFromTemplate | Y |
| requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L67-L71 | var specialVerbs | N | | requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L67-L71 | var specialVerbs | N |
| requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L73-L74 | var specialVerbsNoSubresources | N | | requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L73-L74 | var specialVerbsNoSubresources | N |
| requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L76-L78 | var namespaceSubresources | N | | requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L76-L78 | var namespaceSubresources | N |
| requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L88-L247 | func NewRequestInfo | Y | | requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L88-L247 | func NewRequestInfo | Y |
| requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L267-L274 | func SplitPath | Y | | requestinfo.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo.go#L267-L274 | func SplitPath | Y |
| requestinfo_test.go | https://github.com/kubernetes/apiserver/blob/release-1.23/pkg/endpoints/request/requestinfo_test.go#L30-L148 | func TestGetAPIRequestInfo | Y | | requestinfo_test.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo_test.go#L30-L148 | func TestGetAPIRequestInfo | Y |
| requestinfo_test.go | https://github.com/kubernetes/apiserver/blob/release-1.23/pkg/endpoints/request/requestinfo_test.go#L150-L184 | func TestGetNonAPIRequestInfo | Y | | requestinfo_test.go | https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo_test.go#L150-L184 | func TestGetNonAPIRequestInfo | Y |
| resourcename.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/scheduler/util/utils.go#L144-L148 | func IsScalarResourceName | Y | | resourcename.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/util/utils.go#L157-L161 | func IsScalarResourceName | Y |
| retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func RetainServiceFields | Y | | retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func RetainServiceFields | Y |
| retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func retainServiceHealthCheckNodePort | Y | | retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func retainServiceHealthCheckNodePort | Y |
| retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func retainServiceClusterIP | Y | | retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func retainServiceClusterIP | Y |
| retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func RetainServiceAccountFields | Y | | retain.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain.go | func RetainServiceAccountFields | Y |
| retain_test.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain_test.go#L91-L174 | func TestRetainHealthCheckNodePortInServiceFields | Y | | retain_test.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain_test.go#L91-L174 | func TestRetainHealthCheckNodePortInServiceFields | Y |
| retain_test.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain_test.go#L176-L292 | func TestRetainClusterIPInServiceFields | Y | | retain_test.go | https://github.com/kubernetes-sigs/kubefed/blob/master/pkg/controller/sync/dispatch/retain_test.go#L176-L292 | func TestRetainClusterIPInServiceFields | Y |
| taint.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L37-L73 | func ParseTaints | N | | taint.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L37-L73 | func ParseTaints | Y |
| taint.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L75-L118 | func parseTaint | N | | taint.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L75-L118 | func parseTaint | N |
| taint.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L120-L126 | func validateTaintEffect | N | | taint.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L120-L126 | func validateTaintEffect | N |
| validateclustertaints.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation.go#L5001-L5033 | func ValidateClusterTaints | Y | | taint_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils_test.go#L372-L533 | func TestParseTaints | N |
| validateclustertaints.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation.go#L3305-L3326 | func validateClusterTaintEffect | Y | | validateclustertaints.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L3497-L3518 | func validateClusterTaintEffect | Y |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L326-L348 | func ValidateIngressSpec | N | | validateclustertaints.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5227-L5259 | func ValidateClusterTaints | Y |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L468C1-L509 | func validateIngressBackend | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L326-L348 | func ValidateIngressSpec | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L547C1-L578 | func validateIngressTypedLocalObjectReference | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L468C1-L509 | func validateIngressBackend | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L379-L409 | func validateIngressRules | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L547C1-L578 | func validateIngressTypedLocalObjectReference | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L411C1-L417 | func validateIngressRuleValue | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L379-L409 | func validateIngressRules | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L419-L428 | func validateHTTPIngressRuleValue | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L411C1-L417 | func validateIngressRuleValue | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L430-L466 | func validateHTTPIngressPath | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L419-L428 | func validateHTTPIngressRuleValue | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L299-L324 | func validateIngressTLS | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L430-L466 | func validateHTTPIngressPath | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L641-L646 | func validateTLSSecretName | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L299-L324 | func validateIngressTLS | N |
| validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L357-L377 | func ValidateIngressLoadBalancerStatus | N | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L641-L646 | func validateTLSSecretName | N |
| validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go | func TestValidateIngress | Y | | validatingmci.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation.go#L357-L377 | func ValidateIngressLoadBalancerStatus | N |
| validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go | func TestValidateIngressTLS | N | | validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L591-L824 | func TestValidateIngress | Y |
| validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go | func TestValidateEmptyIngressTLS | N | | validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L1747-L1836 | func TestValidateIngressTLS | N |
| validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go | func TestValidateIngressStatusUpdate | Y | | validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L1838-L1897 | func TestValidateEmptyIngressTLS | N |
| validatingmcs.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/core/validation/validation.go#L6826-L6846 | func ValidateLoadBalancerStatus | N | | validatingmci_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L1899-L1991 | func TestValidateIngressStatusUpdate | Y |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L53-L63 | type ContainerType | N | | validatingmcs.go | https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/core/validation/validation.go#L6826-L6846 | func ValidateLoadBalancerStatus | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L65-L66 | const AllContainers | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L51-L61 | type ContainerType | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L78-L80 | type ContainerVisitor | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L63-L64 | const AllContainers | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L82-L83 | type Visitor | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L72-L74 | type ContainerVisitor | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L85-L94 | func skipEmptyNames | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L76-L77 | type Visitor | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L96-L123 | func VisitContainers | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L79-L88 | func skipEmptyNames | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L125-L195 | func VisitPodSecretNames | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L79-L88 | func VisitContainers | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L197-L213 | func visitContainerSecretNames | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L119-L189 | func VisitPodSecretNames | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L215-L243 | func VisitPodConfigmapNames | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L191-L208 | func visitContainerSecretNames | N |
| visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L245-L261 | func visitContainerConfigmapNames | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L210-L238 | func VisitPodConfigmapNames | N |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L68-L76 | func AllFeatureEnabledContainers | N | | visitpod.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L240-L257 | func visitContainerConfigmapNames | N |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/component-base/featuregate/testing/feature_gate.go#L26-L44 | func SetFeatureGateDuringTest | N | | visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L66-L70 | func AllFeatureEnabledContainers | Y |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L205-L392 | func TestVisitContainers | Y | | visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-base/featuregate/testing/feature_gate.go#L26-L44 | func SetFeatureGateDuringTest | N |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L394-L551 | func TestPodSecrets | Y | | visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L202-L366 | func TestVisitContainers | Y |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L553-L591 | func collectResourcePaths | N | | visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L368-L523 | func TestPodSecrets | Y |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L593-L695 | func TestPodConfigmaps | Y | | visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L525-L563 | func collectResourcePaths | N |
| visitpod_test.go | https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L565-L665 | func TestPodConfigmaps | Y |
*/ */

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils.go
package lifted package lifted
@ -26,7 +26,7 @@ import (
"path/filepath" "path/filepath"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils.go // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils.go
// OutDir creates the absolute path name from path and checks path exists. // OutDir creates the absolute path name from path and checks path exists.
// Returns absolute path including trailing '/' or error if path does not exist. // Returns absolute path including trailing '/' or error if path does not exist.

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go
package lifted package lifted
@ -24,7 +24,7 @@ import (
"testing" "testing"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go#L23-L28 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go#L23-L28
func TestValidDir(t *testing.T) { func TestValidDir(t *testing.T) {
_, err := OutDir("./") _, err := OutDir("./")
@ -33,7 +33,7 @@ func TestValidDir(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go#L30-L35 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go#L30-L35
func TestInvalidDir(t *testing.T) { func TestInvalidDir(t *testing.T) {
_, err := OutDir("./nondir") _, err := OutDir("./nondir")
@ -42,7 +42,7 @@ func TestInvalidDir(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.25/cmd/genutils/genutils_test.go#L37-L42 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/genutils/genutils_test.go#L37-L42
func TestNotDir(t *testing.T) { func TestNotDir(t *testing.T) {
_, err := OutDir("./genutils_test.go") _, err := OutDir("./genutils_test.go")

View File

@ -170,21 +170,22 @@ func (fs *flagScanner) Next() (byte, bool) {
fs.AppendString(fs.end) fs.AppendString(fs.end)
} }
return c, true return c, true
} } else {
c = fs.str[fs.Pos] c = fs.str[fs.Pos]
if c == fs.flag { if c == fs.flag {
if fs.Pos < (fs.Length-1) && fs.str[fs.Pos+1] == fs.flag { if fs.Pos < (fs.Length-1) && fs.str[fs.Pos+1] == fs.flag {
fs.HasFlag = false fs.HasFlag = false
fs.AppendChar(fs.flag) fs.AppendChar(fs.flag)
fs.Pos += 2 fs.Pos += 2
return fs.Next() return fs.Next()
} else if fs.Pos != fs.Length-1 { } else if fs.Pos != fs.Length-1 {
if fs.HasFlag { if fs.HasFlag {
fs.AppendString(fs.end) fs.AppendString(fs.end)
}
fs.AppendString(fs.start)
fs.ChangeFlag = true
fs.HasFlag = true
} }
fs.AppendString(fs.start)
fs.ChangeFlag = true
fs.HasFlag = true
} }
} }
fs.Pos++ fs.Pos++

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L365-L397 // https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity.go#L203-L242
package lifted package lifted
@ -28,14 +28,16 @@ import (
"k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/selection"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers.go#L365-L397 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity.go#L203-L242
// +lifted:changed
// NodeSelectorRequirementsAsSelector converts the []NodeSelectorRequirement core type into a struct that implements // NodeSelectorRequirementsAsSelector converts the []NodeSelectorRequirement core type into a struct that implements
// labels.Selector. // labels.Selector.
func NodeSelectorRequirementsAsSelector(nsm []corev1.NodeSelectorRequirement) (labels.Selector, error) { func NodeSelectorRequirementsAsSelector(nsm []corev1.NodeSelectorRequirement) (labels.Selector, []error) {
if len(nsm) == 0 { if len(nsm) == 0 {
return labels.Nothing(), nil return labels.Nothing(), nil
} }
var errs []error
selector := labels.NewSelector() selector := labels.NewSelector()
for _, expr := range nsm { for _, expr := range nsm {
var op selection.Operator var op selection.Operator
@ -53,13 +55,17 @@ func NodeSelectorRequirementsAsSelector(nsm []corev1.NodeSelectorRequirement) (l
case corev1.NodeSelectorOpLt: case corev1.NodeSelectorOpLt:
op = selection.LessThan op = selection.LessThan
default: default:
return nil, fmt.Errorf("%q is not a valid node selector operator", expr.Operator) errs = append(errs, fmt.Errorf("%q is not a valid node selector operator", expr.Operator))
continue
} }
r, err := labels.NewRequirement(expr.Key, op, expr.Values) r, err := labels.NewRequirement(expr.Key, op, expr.Values)
if err != nil { if err != nil {
return nil, err errs = append(errs, err)
} }
selector = selector.Add(*r) selector = selector.Add(*r)
} }
if len(errs) != 0 {
return nil, errs
}
return selector, nil return selector, nil
} }

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers_test.go#L138-L200 // https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity_test.go#L297-L360
package lifted package lifted
@ -28,7 +28,7 @@ import (
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/helper/helpers_test.go#L138-L200 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-helpers/scheduling/corev1/nodeaffinity/nodeaffinity_test.go#L297-L360
func TestNodeSelectorRequirementsAsSelector(t *testing.T) { func TestNodeSelectorRequirementsAsSelector(t *testing.T) {
matchExpressions := []corev1.NodeSelectorRequirement{{ matchExpressions := []corev1.NodeSelectorRequirement{{

View File

@ -16,8 +16,8 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L466-L495 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L466-L495
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L539-L562 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L539-L562
package lifted package lifted
@ -31,7 +31,7 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L466-L472 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L466-L472
func getPodsLabelSet(template *corev1.PodTemplateSpec) labels.Set { func getPodsLabelSet(template *corev1.PodTemplateSpec) labels.Set {
desiredLabels := make(labels.Set) desiredLabels := make(labels.Set)
for k, v := range template.Labels { for k, v := range template.Labels {
@ -40,14 +40,14 @@ func getPodsLabelSet(template *corev1.PodTemplateSpec) labels.Set {
return desiredLabels return desiredLabels
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L474-L478 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L474-L478
func getPodsFinalizers(template *corev1.PodTemplateSpec) []string { func getPodsFinalizers(template *corev1.PodTemplateSpec) []string {
desiredFinalizers := make([]string, len(template.Finalizers)) desiredFinalizers := make([]string, len(template.Finalizers))
copy(desiredFinalizers, template.Finalizers) copy(desiredFinalizers, template.Finalizers)
return desiredFinalizers return desiredFinalizers
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L480-L486 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L480-L486
func getPodsAnnotationSet(template *corev1.PodTemplateSpec) labels.Set { func getPodsAnnotationSet(template *corev1.PodTemplateSpec) labels.Set {
desiredAnnotations := make(labels.Set) desiredAnnotations := make(labels.Set)
for k, v := range template.Annotations { for k, v := range template.Annotations {
@ -56,7 +56,7 @@ func getPodsAnnotationSet(template *corev1.PodTemplateSpec) labels.Set {
return desiredAnnotations return desiredAnnotations
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L488-L495 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L488-L495
func getPodsPrefix(controllerName string) string { func getPodsPrefix(controllerName string) string {
// use the dash (if the name isn't too long) to make the pod name a bit prettier // use the dash (if the name isn't too long) to make the pod name a bit prettier
prefix := fmt.Sprintf("%s-", controllerName) prefix := fmt.Sprintf("%s-", controllerName)
@ -66,7 +66,7 @@ func getPodsPrefix(controllerName string) string {
return prefix return prefix
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/controller/controller_utils.go#L539-L562 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/controller/controller_utils.go#L539-L562
// +lifted:changed // +lifted:changed
// GetPodFromTemplate generates pod object from a template. // GetPodFromTemplate generates pod object from a template.

View File

@ -19,7 +19,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.24/cmd/kubeadm/app/util/pubkeypin/pubkeypin.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/cmd/kubeadm/app/util/pubkeypin/pubkeypin.go
package pubkeypin package pubkeypin

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/apiserver/blob/release-1.23/pkg/endpoints/request/requestinfo_test.go#L30-L184 // https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo_test.go#L30-L184
package lifted package lifted
@ -28,7 +28,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
// +lifted:source=https://github.com/kubernetes/apiserver/blob/release-1.23/pkg/endpoints/request/requestinfo_test.go#L30-L148 // +lifted:source=https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo_test.go#L30-L148
// +lifted:changed // +lifted:changed
func TestGetAPIRequestInfo(t *testing.T) { func TestGetAPIRequestInfo(t *testing.T) {
@ -143,7 +143,7 @@ func TestGetAPIRequestInfo(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/apiserver/blob/release-1.23/pkg/endpoints/request/requestinfo_test.go#L150-L184 // +lifted:source=https://github.com/kubernetes/apiserver/blob/release-1.26/pkg/endpoints/request/requestinfo_test.go#L150-L184
// +lifted:changed // +lifted:changed
func TestGetNonAPIRequestInfo(t *testing.T) { func TestGetNonAPIRequestInfo(t *testing.T) {

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/scheduler/util/utils.go#L144-L148 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/util/utils.go#L144-L148
package lifted package lifted
@ -24,7 +24,7 @@ import (
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/scheduler/util/utils.go#L144-L148 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/util/utils.go#L157-L161
// +lifted:changed // +lifted:changed
// IsScalarResourceName validates the resource for Extended, Hugepages, Native and AttachableVolume resources // IsScalarResourceName validates the resource for Extended, Hugepages, Native and AttachableVolume resources

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/internal/cache/cache.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/internal/cache/cache.go
package cache package cache
@ -489,6 +489,7 @@ func (cache *cacheImpl) removePod(pod *corev1.Pod) error {
n, ok := cache.nodes[pod.Spec.NodeName] n, ok := cache.nodes[pod.Spec.NodeName]
if !ok { if !ok {
klog.ErrorS(nil, "Node not found when trying to remove pod", "node", klog.KRef("", pod.Spec.NodeName), "podKey", key, "pod", klog.KObj(pod)) klog.ErrorS(nil, "Node not found when trying to remove pod", "node", klog.KRef("", pod.Spec.NodeName), "podKey", key, "pod", klog.KObj(pod))
} else { } else {
if err := n.info.RemovePod(pod); err != nil { if err := n.info.RemovePod(pod); err != nil {
return err return err
@ -746,6 +747,9 @@ func (cache *cacheImpl) cleanupExpiredAssumedPods() {
cache.cleanupAssumedPods(time.Now()) cache.cleanupAssumedPods(time.Now())
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/internal/cache/cache.go#L738-L763
// +lifted:changed
// cleanupAssumedPods exists for making test deterministic by taking time as input argument. // cleanupAssumedPods exists for making test deterministic by taking time as input argument.
// It also reports metrics on the cache size for nodes, pods, and assumed pods. // It also reports metrics on the cache size for nodes, pods, and assumed pods.
func (cache *cacheImpl) cleanupAssumedPods(now time.Time) { func (cache *cacheImpl) cleanupAssumedPods(now time.Time) {

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/internal/cache/interface.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/internal/cache/interface.go
package cache package cache

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/internal/cache/node_tree.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/internal/cache/node_tree.go
package cache package cache
@ -114,7 +114,7 @@ func (nt *nodeTree) updateNode(old, new *corev1.Node) {
if oldZone == newZone { if oldZone == newZone {
return return
} }
_ = nt.removeNode(old) // No error checking. We ignore whether the old node exists or not. nt.removeNode(old) // No error checking. We ignore whether the old node exists or not.
nt.addNode(new) nt.addNode(new)
} }

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/internal/cache/snapshot.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/internal/cache/snapshot.go
package cache package cache

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/framework/listers.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/listers.go
package framework package framework

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/scheduler/framework/parallelize/parallelism.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/parallelize/parallelism.go
package parallelize package parallelize
@ -35,6 +35,9 @@ type Parallelizer struct {
parallelism int parallelism int
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/parallelize/parallelism.go#L35-L38
// +lifted:changed
// NewParallelizer returns an object holding the parallelism. // NewParallelizer returns an object holding the parallelism.
func NewParallelizer(p int) Parallelizer { func NewParallelizer(p int) Parallelizer {
if p <= 0 { if p <= 0 {
@ -57,7 +60,11 @@ func chunkSizeFor(n, parallelism int) int {
return s return s
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/parallelize/parallelism.go#L54-L65
// +lifted:changed
// Until is a wrapper around workqueue.ParallelizeUntil to use in scheduling algorithms. // Until is a wrapper around workqueue.ParallelizeUntil to use in scheduling algorithms.
// A given operation will be a label that is recorded in the goroutine metric.
func (p Parallelizer) Until(ctx context.Context, pieces int, doWorkPiece workqueue.DoWorkPieceFunc) { func (p Parallelizer) Until(ctx context.Context, pieces int, doWorkPiece workqueue.DoWorkPieceFunc) {
workqueue.ParallelizeUntil(ctx, p.parallelism, pieces, doWorkPiece, workqueue.WithChunkSize(chunkSizeFor(pieces, p.parallelism))) workqueue.ParallelizeUntil(ctx, p.parallelism, pieces, doWorkPiece, workqueue.WithChunkSize(chunkSizeFor(pieces, p.parallelism)))
} }

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/scheduler/framework/parallelize/parallelism_test.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/parallelize/parallelism_test.go
package parallelize package parallelize
@ -25,7 +25,7 @@ import (
"testing" "testing"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/scheduler/framework/parallelize/parallelism_test.go // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/parallelize/parallelism_test.go
func TestChunkSize(t *testing.T) { func TestChunkSize(t *testing.T) {
tests := []struct { tests := []struct {

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/framework/types.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/framework/types.go
package framework package framework
@ -68,6 +68,8 @@ const (
Node GVK = "Node" Node GVK = "Node"
PersistentVolume GVK = "PersistentVolume" PersistentVolume GVK = "PersistentVolume"
PersistentVolumeClaim GVK = "PersistentVolumeClaim" PersistentVolumeClaim GVK = "PersistentVolumeClaim"
PodScheduling GVK = "PodScheduling"
ResourceClaim GVK = "ResourceClaim"
StorageClass GVK = "storage.k8s.io/StorageClass" StorageClass GVK = "storage.k8s.io/StorageClass"
CSINode GVK = "storage.k8s.io/CSINode" CSINode GVK = "storage.k8s.io/CSINode"
CSIDriver GVK = "storage.k8s.io/CSIDriver" CSIDriver GVK = "storage.k8s.io/CSIDriver"
@ -108,6 +110,8 @@ type QueuedPodInfo struct {
//nolint:staticcheck //nolint:staticcheck
// disable `deprecation` check for lifted code. // disable `deprecation` check for lifted code.
UnschedulablePlugins sets.String UnschedulablePlugins sets.String
// Whether the Pod is scheduling gated (by PreEnqueuePlugins) or not.
Gated bool
} }
// DeepCopy returns a deep copy of the QueuedPodInfo object. // DeepCopy returns a deep copy of the QueuedPodInfo object.
@ -117,6 +121,8 @@ func (pqi *QueuedPodInfo) DeepCopy() *QueuedPodInfo {
Timestamp: pqi.Timestamp, Timestamp: pqi.Timestamp,
Attempts: pqi.Attempts, Attempts: pqi.Attempts,
InitialAttemptTimestamp: pqi.InitialAttemptTimestamp, InitialAttemptTimestamp: pqi.InitialAttemptTimestamp,
UnschedulablePlugins: pqi.UnschedulablePlugins.Clone(),
Gated: pqi.Gated,
} }
} }
@ -129,7 +135,6 @@ type PodInfo struct {
RequiredAntiAffinityTerms []AffinityTerm RequiredAntiAffinityTerms []AffinityTerm
PreferredAffinityTerms []WeightedAffinityTerm PreferredAffinityTerms []WeightedAffinityTerm
PreferredAntiAffinityTerms []WeightedAffinityTerm PreferredAntiAffinityTerms []WeightedAffinityTerm
ParseError error
} }
// DeepCopy returns a deep copy of the PodInfo object. // DeepCopy returns a deep copy of the PodInfo object.
@ -140,18 +145,17 @@ func (pi *PodInfo) DeepCopy() *PodInfo {
RequiredAntiAffinityTerms: pi.RequiredAntiAffinityTerms, RequiredAntiAffinityTerms: pi.RequiredAntiAffinityTerms,
PreferredAffinityTerms: pi.PreferredAffinityTerms, PreferredAffinityTerms: pi.PreferredAffinityTerms,
PreferredAntiAffinityTerms: pi.PreferredAntiAffinityTerms, PreferredAntiAffinityTerms: pi.PreferredAntiAffinityTerms,
ParseError: pi.ParseError,
} }
} }
// Update creates a full new PodInfo by default. And only updates the pod when the PodInfo // Update creates a full new PodInfo by default. And only updates the pod when the PodInfo
// has been instantiated and the passed pod is the exact same one as the original pod. // has been instantiated and the passed pod is the exact same one as the original pod.
func (pi *PodInfo) Update(pod *corev1.Pod) { func (pi *PodInfo) Update(pod *corev1.Pod) error {
if pod != nil && pi.Pod != nil && pi.Pod.UID == pod.UID { if pod != nil && pi.Pod != nil && pi.Pod.UID == pod.UID {
// PodInfo includes immutable information, and so it is safe to update the pod in place if it is // PodInfo includes immutable information, and so it is safe to update the pod in place if it is
// the exact same pod // the exact same pod
pi.Pod = pod pi.Pod = pod
return return nil
} }
var preferredAffinityTerms []corev1.WeightedPodAffinityTerm var preferredAffinityTerms []corev1.WeightedPodAffinityTerm
var preferredAntiAffinityTerms []corev1.WeightedPodAffinityTerm var preferredAntiAffinityTerms []corev1.WeightedPodAffinityTerm
@ -189,10 +193,10 @@ func (pi *PodInfo) Update(pod *corev1.Pod) {
pi.RequiredAntiAffinityTerms = requiredAntiAffinityTerms pi.RequiredAntiAffinityTerms = requiredAntiAffinityTerms
pi.PreferredAffinityTerms = weightedAffinityTerms pi.PreferredAffinityTerms = weightedAffinityTerms
pi.PreferredAntiAffinityTerms = weightedAntiAffinityTerms pi.PreferredAntiAffinityTerms = weightedAntiAffinityTerms
pi.ParseError = utilerrors.NewAggregate(parseErrs) return utilerrors.NewAggregate(parseErrs)
} }
// AffinityTerm is a processed version of v1.PodAffinityTerm. // AffinityTerm is a processed version of corev1.PodAffinityTerm.
type AffinityTerm struct { type AffinityTerm struct {
//nolint:staticcheck //nolint:staticcheck
// disable `deprecation` check for lifted code. // disable `deprecation` check for lifted code.
@ -210,7 +214,7 @@ func (at *AffinityTerm) Matches(pod *corev1.Pod, nsLabels labels.Set) bool {
return false return false
} }
// WeightedAffinityTerm is a "processed" representation of v1.WeightedAffinityTerm. // WeightedAffinityTerm is a "processed" representation of corev1.WeightedAffinityTerm.
type WeightedAffinityTerm struct { type WeightedAffinityTerm struct {
AffinityTerm AffinityTerm
Weight int32 Weight int32
@ -269,10 +273,10 @@ func getWeightedAffinityTerms(pod *corev1.Pod, v1Terms []corev1.WeightedPodAffin
} }
// NewPodInfo returns a new PodInfo. // NewPodInfo returns a new PodInfo.
func NewPodInfo(pod *corev1.Pod) *PodInfo { func NewPodInfo(pod *corev1.Pod) (*PodInfo, error) {
pInfo := &PodInfo{} pInfo := &PodInfo{}
pInfo.Update(pod) err := pInfo.Update(pod)
return pInfo return pInfo, err
} }
func getPodAffinityTerms(affinity *corev1.Affinity) (terms []corev1.PodAffinityTerm) { func getPodAffinityTerms(affinity *corev1.Affinity) (terms []corev1.PodAffinityTerm) {
@ -281,9 +285,9 @@ func getPodAffinityTerms(affinity *corev1.Affinity) (terms []corev1.PodAffinityT
terms = affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution terms = affinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution
} }
// TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution. // TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution.
//if len(affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 { // if len(affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 {
// terms = append(terms, affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution...) // terms = append(terms, affinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution...)
//} // }
} }
return terms return terms
} }
@ -294,9 +298,9 @@ func getPodAntiAffinityTerms(affinity *corev1.Affinity) (terms []corev1.PodAffin
terms = affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution terms = affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution
} }
// TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution. // TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution.
//if len(affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 { // if len(affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 {
// terms = append(terms, affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution...) // terms = append(terms, affinity.PodAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution...)
//} // }
} }
return terms return terms
} }
@ -464,7 +468,10 @@ func (n *NodeInfo) AddPodInfo(podInfo *PodInfo) {
// AddPod is a wrapper around AddPodInfo. // AddPod is a wrapper around AddPodInfo.
func (n *NodeInfo) AddPod(pod *corev1.Pod) { func (n *NodeInfo) AddPod(pod *corev1.Pod) {
n.AddPodInfo(NewPodInfo(pod)) // ignore this err since apiserver doesn't properly validate affinity terms
// and we can't fix the validation for backwards compatibility.
podInfo, _ := NewPodInfo(pod)
n.AddPodInfo(podInfo)
} }
func podWithAffinity(p *corev1.Pod) bool { func podWithAffinity(p *corev1.Pod) bool {
@ -529,6 +536,7 @@ func (n *NodeInfo) RemovePod(pod *corev1.Pod) error {
// update node info based on the pod and sign. // update node info based on the pod and sign.
// The sign will be set to `+1` when AddPod and to `-1` when RemovePod. // The sign will be set to `+1` when AddPod and to `-1` when RemovePod.
func (n *NodeInfo) update(pod *corev1.Pod, sign int64) { func (n *NodeInfo) update(pod *corev1.Pod, sign int64) {
res, non0CPU, non0Mem := calculateResource(pod) res, non0CPU, non0Mem := calculateResource(pod)
n.Requested.MilliCPU += sign * res.MilliCPU n.Requested.MilliCPU += sign * res.MilliCPU
@ -625,9 +633,9 @@ func (n *NodeInfo) updatePVCRefCounts(pod *corev1.Pod, add bool) {
key := GetNamespacedName(pod.Namespace, v.PersistentVolumeClaim.ClaimName) key := GetNamespacedName(pod.Namespace, v.PersistentVolumeClaim.ClaimName)
if add { if add {
n.PVCRefCounts[key]++ n.PVCRefCounts[key] += 1
} else { } else {
n.PVCRefCounts[key]-- n.PVCRefCounts[key] -= 1
if n.PVCRefCounts[key] <= 0 { if n.PVCRefCounts[key] <= 0 {
delete(n.PVCRefCounts, key) delete(n.PVCRefCounts, key)
} }

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.25/pkg/scheduler/util/pod_resources.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/scheduler/util/pod_resources.go
package util package util

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L37-L126 // https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L37-L126
package lifted package lifted
@ -29,7 +29,8 @@ import (
"k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L37-L73 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L37-L73
// +lifted:changed
// ParseTaints takes a spec which is an array and creates slices for new taints to be added, taints to be deleted. // ParseTaints takes a spec which is an array and creates slices for new taints to be added, taints to be deleted.
// It also validates the spec. For example, the form `<key>` may be used to remove a taint, but not to add one. // It also validates the spec. For example, the form `<key>` may be used to remove a taint, but not to add one.
@ -73,7 +74,7 @@ func ParseTaints(spec []string) ([]corev1.Taint, []corev1.Taint, error) {
return taints, taintsToRemove, nil return taints, taintsToRemove, nil
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L75-L118 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L75-L118
// parseTaint parses a taint from a string, whose form must be either // parseTaint parses a taint from a string, whose form must be either
// '<key>=<value>:<effect>', '<key>:<effect>', or '<key>'. // '<key>=<value>:<effect>', '<key>:<effect>', or '<key>'.
@ -120,7 +121,8 @@ func parseTaint(st string) (corev1.Taint, error) {
return taint, nil return taint, nil
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L120-L126 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils.go#L120-L126
func validateTaintEffect(effect corev1.TaintEffect) error { func validateTaintEffect(effect corev1.TaintEffect) error {
if effect != corev1.TaintEffectNoSchedule && effect != corev1.TaintEffectPreferNoSchedule && effect != corev1.TaintEffectNoExecute { if effect != corev1.TaintEffectNoSchedule && effect != corev1.TaintEffectPreferNoSchedule && effect != corev1.TaintEffectNoExecute {
return fmt.Errorf("invalid taint effect: %v, unsupported taint effect", effect) return fmt.Errorf("invalid taint effect: %v, unsupported taint effect", effect)

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils_test.go#L372-L533 // https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils_test.go#L372-L533
package lifted package lifted
@ -27,6 +27,8 @@ import (
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/kubectl/pkg/cmd/taint/utils_test.go#L372-L533
func TestParseTaints(t *testing.T) { func TestParseTaints(t *testing.T) {
cases := []struct { cases := []struct {
name string name string

View File

@ -16,8 +16,8 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase. // This code is directly lifted from the Kubernetes codebase.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation.go#L5001-L5033 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L3497-L3518
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation.go#L3305-L3326 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5227-L5259
package lifted package lifted
@ -31,10 +31,32 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation.go#L5001-L5033 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L3497-L3518
// +lifted:changed // +lifted:changed
// ValidateClusterTaints tests if given taints have valid data. // Original func name: validateTaintEffect
func validateClusterTaintEffect(effect *corev1.TaintEffect, allowEmpty bool, fldPath *field.Path) field.ErrorList {
if !allowEmpty && len(*effect) == 0 {
return field.ErrorList{field.Required(fldPath, "")}
}
allErrors := field.ErrorList{}
switch *effect {
case corev1.TaintEffectNoSchedule, corev1.TaintEffectNoExecute:
default:
validValues := []string{
string(corev1.TaintEffectNoSchedule),
string(corev1.TaintEffectNoExecute),
}
allErrors = append(allErrors, field.NotSupported(fldPath, *effect, validValues))
}
return allErrors
}
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/apis/core/validation/validation.go#L5227-L5259
// +lifted:changed
// ValidateClusterTaints tests if given taints have valid data. Original func name: validateNodeTaints
func ValidateClusterTaints(taints []corev1.Taint, fldPath *field.Path) field.ErrorList { func ValidateClusterTaints(taints []corev1.Taint, fldPath *field.Path) field.ErrorList {
allErrors := field.ErrorList{} allErrors := field.ErrorList{}
@ -71,23 +93,3 @@ func ValidateClusterTaints(taints []corev1.Taint, fldPath *field.Path) field.Err
} }
return allErrors return allErrors
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/apis/core/validation/validation.go#L3305-L3326
// +lifted:changed
func validateClusterTaintEffect(effect *corev1.TaintEffect, allowEmpty bool, fldPath *field.Path) field.ErrorList {
if !allowEmpty && len(*effect) == 0 {
return field.ErrorList{field.Required(fldPath, "")}
}
allErrors := field.ErrorList{}
switch *effect {
case corev1.TaintEffectNoSchedule, corev1.TaintEffectNoExecute:
default:
validValues := []string{
string(corev1.TaintEffectNoSchedule),
string(corev1.TaintEffectNoExecute),
}
allErrors = append(allErrors, field.NotSupported(fldPath, *effect, validValues))
}
return allErrors
}

View File

@ -14,7 +14,7 @@ import (
networkingv1alpha1 "github.com/karmada-io/karmada/pkg/apis/networking/v1alpha1" networkingv1alpha1 "github.com/karmada-io/karmada/pkg/apis/networking/v1alpha1"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L591-L824
// +lifted:changed // +lifted:changed
func TestValidateIngress(t *testing.T) { func TestValidateIngress(t *testing.T) {
@ -244,7 +244,7 @@ func TestValidateIngress(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L1747-L1836
func TestValidateIngressTLS(t *testing.T) { func TestValidateIngressTLS(t *testing.T) {
pathTypeImplementationSpecific := networkingv1.PathTypeImplementationSpecific pathTypeImplementationSpecific := networkingv1.PathTypeImplementationSpecific
@ -329,7 +329,7 @@ func TestValidateIngressTLS(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L1838-L1897
// TestValidateEmptyIngressTLS verifies that an empty TLS configuration can be // TestValidateEmptyIngressTLS verifies that an empty TLS configuration can be
// specified, which ingress controllers may interpret to mean that TLS should be // specified, which ingress controllers may interpret to mean that TLS should be
@ -386,7 +386,7 @@ func TestValidateEmptyIngressTLS(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.27/pkg/apis/networking/validation/validation_test.go#L1899-L1991
// +lifted:changed // +lifted:changed
func TestValidateIngressStatusUpdate(t *testing.T) { func TestValidateIngressStatusUpdate(t *testing.T) {

View File

@ -16,7 +16,7 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go
package lifted package lifted
@ -24,7 +24,7 @@ import (
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L53-L63 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L51-L61
// ContainerType signifies container type // ContainerType signifies container type
type ContainerType int type ContainerType int
@ -38,23 +38,24 @@ const (
EphemeralContainers EphemeralContainers
) )
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L65-L66 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L63-L64
// AllContainers specifies that all containers be visited // AllContainers specifies that all containers be visited
const AllContainers ContainerType = (InitContainers | Containers | EphemeralContainers) const AllContainers ContainerType = InitContainers | Containers | EphemeralContainers
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L78-L80 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L72-L74
// ContainerVisitor is called with each container spec, and returns true // ContainerVisitor is called with each container spec, and returns true
// if visiting should continue. // if visiting should continue.
type ContainerVisitor func(container *corev1.Container, containerType ContainerType) (shouldContinue bool) type ContainerVisitor func(container *corev1.Container, containerType ContainerType) (shouldContinue bool)
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L82-L83 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L76-L77
// Visitor is called with each object name, and returns true if visiting should continue // Visitor is called with each object name, and returns true if visiting should continue
type Visitor func(name string) (shouldContinue bool) type Visitor func(name string) (shouldContinue bool)
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L85-L94 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L79-L88
func skipEmptyNames(visitor Visitor) Visitor { func skipEmptyNames(visitor Visitor) Visitor {
return func(name string) bool { return func(name string) bool {
if len(name) == 0 { if len(name) == 0 {
@ -66,7 +67,7 @@ func skipEmptyNames(visitor Visitor) Visitor {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L96-L123 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L79-L88
// VisitContainers invokes the visitor function with a pointer to every container // VisitContainers invokes the visitor function with a pointer to every container
// spec in the given pod spec with type set in mask. If visitor returns false, // spec in the given pod spec with type set in mask. If visitor returns false,
@ -97,7 +98,7 @@ func VisitContainers(podSpec *corev1.PodSpec, mask ContainerType, visitor Contai
return true return true
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L125-L195 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L119-L189
// VisitPodSecretNames invokes the visitor function with the name of every secret // VisitPodSecretNames invokes the visitor function with the name of every secret
// referenced by the pod spec. If visitor returns false, visiting is short-circuited. // referenced by the pod spec. If visitor returns false, visiting is short-circuited.
@ -173,7 +174,8 @@ func VisitPodSecretNames(pod *corev1.Pod, visitor Visitor) bool {
return true return true
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L197-L213 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L191-L208
func visitContainerSecretNames(container *corev1.Container, visitor Visitor) bool { func visitContainerSecretNames(container *corev1.Container, visitor Visitor) bool {
for _, env := range container.EnvFrom { for _, env := range container.EnvFrom {
if env.SecretRef != nil { if env.SecretRef != nil {
@ -192,7 +194,7 @@ func visitContainerSecretNames(container *corev1.Container, visitor Visitor) boo
return true return true
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L215-L243 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L210-L238
// VisitPodConfigmapNames invokes the visitor function with the name of every configmap // VisitPodConfigmapNames invokes the visitor function with the name of every configmap
// referenced by the pod spec. If visitor returns false, visiting is short-circuited. // referenced by the pod spec. If visitor returns false, visiting is short-circuited.
@ -224,7 +226,9 @@ func VisitPodConfigmapNames(pod *corev1.Pod, visitor Visitor) bool {
return true return true
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L245-L261 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L240-L257
// visitContainerConfigmapNames returns true unless the visitor returned false when invoked with a configmap reference
func visitContainerConfigmapNames(container *corev1.Container, visitor Visitor) bool { func visitContainerConfigmapNames(container *corev1.Container, visitor Visitor) bool {
for _, env := range container.EnvFrom { for _, env := range container.EnvFrom {
if env.ConfigMapRef != nil { if env.ConfigMapRef != nil {

View File

@ -16,7 +16,12 @@ limitations under the License.
// This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package. // This code is directly lifted from the Kubernetes codebase in order to avoid relying on the k8s.io/kubernetes package.
// For reference: // For reference:
// https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L205-L695 // https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L66-L70
// https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L202-L366
// https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L368-L523
// https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L525-L563
// https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L565-L665
// https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-base/featuregate/testing/feature_gate.go#L26-L44
package lifted package lifted
@ -47,7 +52,8 @@ func init() {
runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(testKubernetesFeatureGates)) runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(testKubernetesFeatureGates))
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util.go#L68-L76 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util.go#L66-L70
// +lifted:changed
// AllFeatureEnabledContainers returns a ContainerType mask which includes all container // AllFeatureEnabledContainers returns a ContainerType mask which includes all container
// types except for the ones guarded by feature gate. // types except for the ones guarded by feature gate.
@ -59,7 +65,7 @@ func AllFeatureEnabledContainers() ContainerType {
return containerType return containerType
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/staging/src/k8s.io/component-base/featuregate/testing/feature_gate.go#L26-L44 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/staging/src/k8s.io/component-base/featuregate/testing/feature_gate.go#L26-L44
// SetFeatureGateDuringTest sets the specified gate to the specified value, and returns a function that restores the original value. // SetFeatureGateDuringTest sets the specified gate to the specified value, and returns a function that restores the original value.
// Failures to set or restore cause the test to fail. // Failures to set or restore cause the test to fail.
@ -81,7 +87,7 @@ func SetFeatureGateDuringTest(tb testing.TB, gate featuregate.FeatureGate, f fea
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L205-L392 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L202-L366
// +lifted:changed // +lifted:changed
func TestVisitContainers(t *testing.T) { func TestVisitContainers(t *testing.T) {
@ -273,7 +279,7 @@ func TestVisitContainers(t *testing.T) {
} }
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L394-L551 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L368-L523
// +lifted:changed // +lifted:changed
func TestPodSecrets(t *testing.T) { func TestPodSecrets(t *testing.T) {
@ -435,7 +441,7 @@ func TestPodSecrets(t *testing.T) {
}) })
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L553-L591 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L525-L563
// collectResourcePaths traverses the object, computing all the struct paths that lead to fields with resourcename in the name. // collectResourcePaths traverses the object, computing all the struct paths that lead to fields with resourcename in the name.
// disable `deprecation` check for lifted code. // disable `deprecation` check for lifted code.
@ -480,7 +486,7 @@ func collectResourcePaths(t *testing.T, resourcename string, path *field.Path, n
return resourcePaths return resourcePaths
} }
// +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.23/pkg/api/v1/pod/util_test.go#L593-L695 // +lifted:source=https://github.com/kubernetes/kubernetes/blob/release-1.26/pkg/api/v1/pod/util_test.go#L565-L665
// +lifted:changed // +lifted:changed
func TestPodConfigmaps(t *testing.T) { func TestPodConfigmaps(t *testing.T) {

View File

@ -106,8 +106,8 @@ func ClusterMatches(cluster *clusterv1alpha1.Cluster, affinity policyv1alpha1.Cl
if affinity.FieldSelector != nil { if affinity.FieldSelector != nil {
var matchFields labels.Selector var matchFields labels.Selector
var err error var errs []error
if matchFields, err = lifted.NodeSelectorRequirementsAsSelector(affinity.FieldSelector.MatchExpressions); err != nil { if matchFields, errs = lifted.NodeSelectorRequirementsAsSelector(affinity.FieldSelector.MatchExpressions); errs != nil {
return false return false
} }
clusterFields := extractClusterFields(cluster) clusterFields := extractClusterFields(cluster)