mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
Merge pull request #115065 from apelisse/apimachinery-managed-fields
managedfields: Move most of fieldmanager package to managefields
This commit is contained in:
commit
e8ae6658ed
@ -25,7 +25,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||||
@ -58,12 +58,12 @@ type DeploymentStorage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
||||||
func ReplicasPathMappings() fieldmanager.ResourcePathMappings {
|
func ReplicasPathMappings() managedfields.ResourcePathMappings {
|
||||||
return replicasPathInDeployment
|
return replicasPathInDeployment
|
||||||
}
|
}
|
||||||
|
|
||||||
// maps a group version to the replicas path in a deployment object
|
// maps a group version to the replicas path in a deployment object
|
||||||
var replicasPathInDeployment = fieldmanager.ResourcePathMappings{
|
var replicasPathInDeployment = managedfields.ResourcePathMappings{
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1beta1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1beta1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1beta2"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1beta2"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
@ -422,7 +422,7 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
managedFieldsHandler := managedfields.NewScaleHandler(
|
||||||
deployment.ManagedFields,
|
deployment.ManagedFields,
|
||||||
groupVersion,
|
groupVersion,
|
||||||
replicasPathInDeployment,
|
replicasPathInDeployment,
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||||
@ -54,12 +54,12 @@ type ReplicaSetStorage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
||||||
func ReplicasPathMappings() fieldmanager.ResourcePathMappings {
|
func ReplicasPathMappings() managedfields.ResourcePathMappings {
|
||||||
return replicasPathInReplicaSet
|
return replicasPathInReplicaSet
|
||||||
}
|
}
|
||||||
|
|
||||||
// maps a group version to the replicas path in a replicaset object
|
// maps a group version to the replicas path in a replicaset object
|
||||||
var replicasPathInReplicaSet = fieldmanager.ResourcePathMappings{
|
var replicasPathInReplicaSet = managedfields.ResourcePathMappings{
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1beta2"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1beta2"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
}
|
}
|
||||||
@ -317,7 +317,7 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
managedFieldsHandler := managedfields.NewScaleHandler(
|
||||||
replicaset.ManagedFields,
|
replicaset.ManagedFields,
|
||||||
groupVersion,
|
groupVersion,
|
||||||
replicasPathInReplicaSet,
|
replicasPathInReplicaSet,
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||||
@ -51,12 +51,12 @@ type StatefulSetStorage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
||||||
func ReplicasPathMappings() fieldmanager.ResourcePathMappings {
|
func ReplicasPathMappings() managedfields.ResourcePathMappings {
|
||||||
return replicasPathInStatefulSet
|
return replicasPathInStatefulSet
|
||||||
}
|
}
|
||||||
|
|
||||||
// maps a group version to the replicas path in a statefulset object
|
// maps a group version to the replicas path in a statefulset object
|
||||||
var replicasPathInStatefulSet = fieldmanager.ResourcePathMappings{
|
var replicasPathInStatefulSet = managedfields.ResourcePathMappings{
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1beta1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1beta1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1beta2"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1beta2"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "apps", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
@ -311,7 +311,7 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
managedFieldsHandler := managedfields.NewScaleHandler(
|
||||||
statefulset.ManagedFields,
|
statefulset.ManagedFields,
|
||||||
groupVersion,
|
groupVersion,
|
||||||
replicasPathInStatefulSet,
|
replicasPathInStatefulSet,
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||||
@ -53,12 +53,12 @@ type ControllerStorage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
// ReplicasPathMappings returns the mappings between each group version and a replicas path
|
||||||
func ReplicasPathMappings() fieldmanager.ResourcePathMappings {
|
func ReplicasPathMappings() managedfields.ResourcePathMappings {
|
||||||
return replicasPathInReplicationController
|
return replicasPathInReplicationController
|
||||||
}
|
}
|
||||||
|
|
||||||
// maps a group version to the replicas path in a deployment object
|
// maps a group version to the replicas path in a deployment object
|
||||||
var replicasPathInReplicationController = fieldmanager.ResourcePathMappings{
|
var replicasPathInReplicationController = managedfields.ResourcePathMappings{
|
||||||
schema.GroupVersion{Group: "", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
schema.GroupVersion{Group: "", Version: "v1"}.String(): fieldpath.MakePathOrDie("spec", "replicas"),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
managedFieldsHandler := managedfields.NewScaleHandler(
|
||||||
replicationcontroller.ManagedFields,
|
replicationcontroller.ManagedFields,
|
||||||
groupVersion,
|
groupVersion,
|
||||||
replicasPathInReplicationController,
|
replicasPathInReplicationController,
|
||||||
|
@ -58,6 +58,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime/serializer/protobuf"
|
"k8s.io/apimachinery/pkg/runtime/serializer/protobuf"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer/versioning"
|
"k8s.io/apimachinery/pkg/runtime/serializer/versioning"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup"
|
utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup"
|
||||||
@ -65,7 +66,6 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers"
|
"k8s.io/apiserver/pkg/endpoints/handlers"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
|
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
|
||||||
"k8s.io/apiserver/pkg/endpoints/metrics"
|
"k8s.io/apiserver/pkg/endpoints/metrics"
|
||||||
apirequest "k8s.io/apiserver/pkg/endpoints/request"
|
apirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
@ -680,9 +680,9 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
openAPIModels = nil
|
openAPIModels = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var typeConverter fieldmanager.TypeConverter = fieldmanager.NewDeducedTypeConverter()
|
var typeConverter managedfields.TypeConverter = managedfields.NewDeducedTypeConverter()
|
||||||
if len(openAPIModels) > 0 {
|
if len(openAPIModels) > 0 {
|
||||||
typeConverter, err = fieldmanager.NewTypeConverter(openAPIModels, crd.Spec.PreserveUnknownFields)
|
typeConverter, err = managedfields.NewTypeConverter(openAPIModels, crd.Spec.PreserveUnknownFields)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -699,7 +699,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create replicasPathInCustomResource
|
// Create replicasPathInCustomResource
|
||||||
replicasPathInCustomResource := fieldmanager.ResourcePathMappings{}
|
replicasPathInCustomResource := managedfields.ResourcePathMappings{}
|
||||||
for _, v := range crd.Spec.Versions {
|
for _, v := range crd.Spec.Versions {
|
||||||
subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, v.Name)
|
subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, v.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -981,8 +981,8 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func scopeWithFieldManager(typeConverter fieldmanager.TypeConverter, reqScope handlers.RequestScope, resetFields map[fieldpath.APIVersion]*fieldpath.Set, subresource string) (handlers.RequestScope, error) {
|
func scopeWithFieldManager(typeConverter managedfields.TypeConverter, reqScope handlers.RequestScope, resetFields map[fieldpath.APIVersion]*fieldpath.Set, subresource string) (handlers.RequestScope, error) {
|
||||||
fieldManager, err := fieldmanager.NewDefaultCRDFieldManager(
|
fieldManager, err := managedfields.NewDefaultCRDFieldManager(
|
||||||
typeConverter,
|
typeConverter,
|
||||||
reqScope.Convertor,
|
reqScope.Convertor,
|
||||||
reqScope.Defaulter,
|
reqScope.Defaulter,
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
@ -41,7 +41,7 @@ type CustomResourceStorage struct {
|
|||||||
Scale *ScaleREST
|
Scale *ScaleREST
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStorage(resource schema.GroupResource, singularResource schema.GroupResource, kind, listKind schema.GroupVersionKind, strategy customResourceStrategy, optsGetter generic.RESTOptionsGetter, categories []string, tableConvertor rest.TableConvertor, replicasPathMapping fieldmanager.ResourcePathMappings) CustomResourceStorage {
|
func NewStorage(resource schema.GroupResource, singularResource schema.GroupResource, kind, listKind schema.GroupVersionKind, strategy customResourceStrategy, optsGetter generic.RESTOptionsGetter, categories []string, tableConvertor rest.TableConvertor, replicasPathMapping managedfields.ResourcePathMappings) CustomResourceStorage {
|
||||||
var storage CustomResourceStorage
|
var storage CustomResourceStorage
|
||||||
store := &genericregistry.Store{
|
store := &genericregistry.Store{
|
||||||
NewFunc: func() runtime.Object {
|
NewFunc: func() runtime.Object {
|
||||||
@ -152,7 +152,7 @@ type ScaleREST struct {
|
|||||||
statusReplicasPath string
|
statusReplicasPath string
|
||||||
labelSelectorPath string
|
labelSelectorPath string
|
||||||
parentGV schema.GroupVersion
|
parentGV schema.GroupVersion
|
||||||
replicasPathMapping fieldmanager.ResourcePathMappings
|
replicasPathMapping managedfields.ResourcePathMappings
|
||||||
}
|
}
|
||||||
|
|
||||||
// ScaleREST implements Patcher
|
// ScaleREST implements Patcher
|
||||||
@ -302,7 +302,7 @@ type scaleUpdatedObjectInfo struct {
|
|||||||
statusReplicasPath string
|
statusReplicasPath string
|
||||||
labelSelectorPath string
|
labelSelectorPath string
|
||||||
parentGV schema.GroupVersion
|
parentGV schema.GroupVersion
|
||||||
replicasPathMapping fieldmanager.ResourcePathMappings
|
replicasPathMapping managedfields.ResourcePathMappings
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *scaleUpdatedObjectInfo) Preconditions() *metav1.Preconditions {
|
func (i *scaleUpdatedObjectInfo) Preconditions() *metav1.Preconditions {
|
||||||
@ -313,7 +313,7 @@ func (i *scaleUpdatedObjectInfo) UpdatedObject(ctx context.Context, oldObj runti
|
|||||||
cr := oldObj.DeepCopyObject().(*unstructured.Unstructured)
|
cr := oldObj.DeepCopyObject().(*unstructured.Unstructured)
|
||||||
const invalidSpecReplicas = -2147483648 // smallest int32
|
const invalidSpecReplicas = -2147483648 // smallest int32
|
||||||
|
|
||||||
managedFieldsHandler := fieldmanager.NewScaleHandler(
|
managedFieldsHandler := managedfields.NewScaleHandler(
|
||||||
cr.GetManagedFields(),
|
cr.GetManagedFields(),
|
||||||
i.parentGV,
|
i.parentGV,
|
||||||
i.replicasPathMapping,
|
i.replicasPathMapping,
|
||||||
|
@ -34,7 +34,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
registrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
registrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
||||||
@ -110,7 +110,7 @@ func newStorage(t *testing.T) (customresource.CustomResourceStorage, *etcd3testi
|
|||||||
restOptions,
|
restOptions,
|
||||||
[]string{"all"},
|
[]string{"all"},
|
||||||
table,
|
table,
|
||||||
fieldmanager.ResourcePathMappings{},
|
managedfields.ResourcePathMappings{},
|
||||||
)
|
)
|
||||||
|
|
||||||
return storage, server
|
return storage, server
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package fieldmanager
|
package managedfields
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -22,7 +22,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
)
|
)
|
||||||
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package fieldmanager_test
|
package managedfields_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -33,16 +33,16 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields/managedfieldstest"
|
||||||
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
|
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest"
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
|
||||||
"k8s.io/kube-openapi/pkg/validation/spec"
|
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
var fakeTypeConverter = func() fieldmanager.TypeConverter {
|
var fakeTypeConverter = func() managedfields.TypeConverter {
|
||||||
data, err := ioutil.ReadFile(filepath.Join(strings.Repeat(".."+string(filepath.Separator), 8),
|
data, err := ioutil.ReadFile(filepath.Join(strings.Repeat(".."+string(filepath.Separator), 7),
|
||||||
"api", "openapi-spec", "swagger.json"))
|
"api", "openapi-spec", "swagger.json"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@ -56,7 +56,7 @@ var fakeTypeConverter = func() fieldmanager.TypeConverter {
|
|||||||
vCopy := v
|
vCopy := v
|
||||||
convertedDefs[k] = &vCopy
|
convertedDefs[k] = &vCopy
|
||||||
}
|
}
|
||||||
typeConverter, err := fieldmanager.NewTypeConverter(convertedDefs, false)
|
typeConverter, err := managedfields.NewTypeConverter(convertedDefs, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@ -66,7 +66,7 @@ var fakeTypeConverter = func() fieldmanager.TypeConverter {
|
|||||||
// TestUpdateApplyConflict tests that applying to an object, which
|
// TestUpdateApplyConflict tests that applying to an object, which
|
||||||
// wasn't created by apply, will give conflicts
|
// wasn't created by apply, will give conflicts
|
||||||
func TestUpdateApplyConflict(t *testing.T) {
|
func TestUpdateApplyConflict(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
patch := []byte(`{
|
patch := []byte(`{
|
||||||
"apiVersion": "apps/v1",
|
"apiVersion": "apps/v1",
|
||||||
@ -127,7 +127,7 @@ func TestUpdateApplyConflict(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestApplyStripsFields(t *testing.T) {
|
func TestApplyStripsFields(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
newObj := &unstructured.Unstructured{
|
newObj := &unstructured.Unstructured{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
@ -159,7 +159,7 @@ func TestApplyStripsFields(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestVersionCheck(t *testing.T) {
|
func TestVersionCheck(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -199,7 +199,7 @@ func TestVersionCheck(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
func TestVersionCheckDoesNotPanic(t *testing.T) {
|
func TestVersionCheckDoesNotPanic(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -238,7 +238,7 @@ func TestVersionCheckDoesNotPanic(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestApplyDoesNotStripLabels(t *testing.T) {
|
func TestApplyDoesNotStripLabels(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -292,7 +292,7 @@ func TestApplyNewObject(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.gvk.String(), func(t *testing.T) {
|
t.Run(test.gvk.String(), func(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, test.gvk)
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, test.gvk)
|
||||||
|
|
||||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal(test.obj, &appliedObj.Object); err != nil {
|
if err := yaml.Unmarshal(test.obj, &appliedObj.Object); err != nil {
|
||||||
@ -307,7 +307,7 @@ func TestApplyNewObject(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestApplyFailsWithManagedFields(t *testing.T) {
|
func TestApplyFailsWithManagedFields(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -332,7 +332,7 @@ func TestApplyFailsWithManagedFields(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestApplySuccessWithNoManagedFields(t *testing.T) {
|
func TestApplySuccessWithNoManagedFields(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -355,7 +355,7 @@ func TestApplySuccessWithNoManagedFields(t *testing.T) {
|
|||||||
|
|
||||||
// Run an update and apply, and make sure that nothing has changed.
|
// Run an update and apply, and make sure that nothing has changed.
|
||||||
func TestNoOpChanges(t *testing.T) {
|
func TestNoOpChanges(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -406,7 +406,7 @@ func TestNoOpChanges(t *testing.T) {
|
|||||||
// Tests that one can reset the managedFields by sending either an empty
|
// Tests that one can reset the managedFields by sending either an empty
|
||||||
// list
|
// list
|
||||||
func TestResetManagedFieldsEmptyList(t *testing.T) {
|
func TestResetManagedFieldsEmptyList(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -447,7 +447,7 @@ func TestResetManagedFieldsEmptyList(t *testing.T) {
|
|||||||
|
|
||||||
// Tests that one can reset the managedFields by sending either a list with one empty item.
|
// Tests that one can reset the managedFields by sending either a list with one empty item.
|
||||||
func TestResetManagedFieldsEmptyItem(t *testing.T) {
|
func TestResetManagedFieldsEmptyItem(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -487,7 +487,7 @@ func TestResetManagedFieldsEmptyItem(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestServerSideApplyWithInvalidLastApplied(t *testing.T) {
|
func TestServerSideApplyWithInvalidLastApplied(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
// create object with client-side apply
|
// create object with client-side apply
|
||||||
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
@ -566,7 +566,7 @@ spec:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestInteropForClientSideApplyAndServerSideApply(t *testing.T) {
|
func TestInteropForClientSideApplyAndServerSideApply(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
// create object with client-side apply
|
// create object with client-side apply
|
||||||
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
@ -650,7 +650,7 @@ spec:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNoTrackManagedFieldsForClientSideApply(t *testing.T) {
|
func TestNoTrackManagedFieldsForClientSideApply(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
// create object
|
// create object
|
||||||
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
@ -830,7 +830,7 @@ func getLastApplied(obj runtime.Object) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateViaSubresources(t *testing.T) {
|
func TestUpdateViaSubresources(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManagerSubresource(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "scale")
|
f := managedfieldstest.NewTestFieldManagerSubresource(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "scale")
|
||||||
|
|
||||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal([]byte(`{
|
if err := yaml.Unmarshal([]byte(`{
|
||||||
@ -885,7 +885,7 @@ func TestUpdateViaSubresources(t *testing.T) {
|
|||||||
// Ensures that a no-op Apply does not mutate managed fields
|
// Ensures that a no-op Apply does not mutate managed fields
|
||||||
func TestApplyDoesNotChangeManagedFields(t *testing.T) {
|
func TestApplyDoesNotChangeManagedFields(t *testing.T) {
|
||||||
originalManagedFields := []metav1.ManagedFieldsEntry{}
|
originalManagedFields := []metav1.ManagedFieldsEntry{}
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter,
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter,
|
||||||
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
newObj := &unstructured.Unstructured{
|
newObj := &unstructured.Unstructured{
|
||||||
Object: map[string]interface{}{},
|
Object: map[string]interface{}{},
|
||||||
@ -979,7 +979,7 @@ func TestApplyDoesNotChangeManagedFields(t *testing.T) {
|
|||||||
// Ensures that a no-op Update does not mutate managed fields
|
// Ensures that a no-op Update does not mutate managed fields
|
||||||
func TestUpdateDoesNotChangeManagedFields(t *testing.T) {
|
func TestUpdateDoesNotChangeManagedFields(t *testing.T) {
|
||||||
originalManagedFields := []metav1.ManagedFieldsEntry{}
|
originalManagedFields := []metav1.ManagedFieldsEntry{}
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter,
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter,
|
||||||
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
newObj := &unstructured.Unstructured{
|
newObj := &unstructured.Unstructured{
|
||||||
Object: map[string]interface{}{},
|
Object: map[string]interface{}{},
|
||||||
@ -1051,7 +1051,7 @@ func TestUpdateDoesNotChangeManagedFields(t *testing.T) {
|
|||||||
// This test makes sure that the liveObject during a patch does not mutate
|
// This test makes sure that the liveObject during a patch does not mutate
|
||||||
// its managed fields.
|
// its managed fields.
|
||||||
func TestLiveObjectManagedFieldsNotRemoved(t *testing.T) {
|
func TestLiveObjectManagedFieldsNotRemoved(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter,
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter,
|
||||||
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
newObj := &unstructured.Unstructured{
|
newObj := &unstructured.Unstructured{
|
||||||
Object: map[string]interface{}{},
|
Object: map[string]interface{}{},
|
@ -20,7 +20,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAtMostEvery(t *testing.T) {
|
func TestAtMostEvery(t *testing.T) {
|
@ -29,9 +29,9 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
internaltesting "k8s.io/apimachinery/pkg/util/managedfields/internal/testing"
|
||||||
internaltesting "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/testing"
|
"k8s.io/apimachinery/pkg/util/managedfields/managedfieldstest"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ func TestCapUpdateManagers(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expectIdempotence does a no-op update and ensures that managedFields doesn't change by calling capUpdateManagers.
|
// expectIdempotence does a no-op update and ensures that managedFields doesn't change by calling capUpdateManagers.
|
||||||
func expectIdempotence(t *testing.T, f fieldmanagertest.TestFieldManager) {
|
func expectIdempotence(t *testing.T, f managedfieldstest.TestFieldManager) {
|
||||||
before := []metav1.ManagedFieldsEntry{}
|
before := []metav1.ManagedFieldsEntry{}
|
||||||
for _, m := range f.ManagedFields() {
|
for _, m := range f.ManagedFields() {
|
||||||
before = append(before, *m.DeepCopy())
|
before = append(before, *m.DeepCopy())
|
||||||
@ -268,7 +268,7 @@ func expectIdempotence(t *testing.T, f fieldmanagertest.TestFieldManager) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// expectManagesField ensures that manager m currently manages field path p.
|
// expectManagesField ensures that manager m currently manages field path p.
|
||||||
func expectManagesField(t *testing.T, f fieldmanagertest.TestFieldManager, m string, p fieldpath.Path) {
|
func expectManagesField(t *testing.T, f managedfieldstest.TestFieldManager, m string, p fieldpath.Path) {
|
||||||
for _, e := range f.ManagedFields() {
|
for _, e := range f.ManagedFields() {
|
||||||
if e.Manager == m {
|
if e.Manager == m {
|
||||||
var s fieldpath.Set
|
var s fieldpath.Set
|
@ -23,7 +23,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
||||||
)
|
)
|
@ -22,13 +22,13 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"k8s.io/kube-openapi/pkg/validation/spec"
|
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||||
)
|
)
|
||||||
|
|
||||||
var fakeTypeConverter = func() internal.TypeConverter {
|
var fakeTypeConverter = func() internal.TypeConverter {
|
||||||
data, err := ioutil.ReadFile(filepath.Join(
|
data, err := ioutil.ReadFile(filepath.Join(
|
||||||
strings.Repeat(".."+string(filepath.Separator), 9),
|
strings.Repeat(".."+string(filepath.Separator), 8),
|
||||||
"api", "openapi-spec", "swagger.json"))
|
"api", "openapi-spec", "swagger.json"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
@ -26,9 +26,9 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields/managedfieldstest"
|
||||||
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
|
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest"
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
@ -46,7 +46,7 @@ type testArgs struct {
|
|||||||
// created with the client-side apply last-applied annotation
|
// created with the client-side apply last-applied annotation
|
||||||
// will not give conflicts
|
// will not give conflicts
|
||||||
func TestApplyUsingLastAppliedAnnotation(t *testing.T) {
|
func TestApplyUsingLastAppliedAnnotation(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||||
|
|
||||||
tests := []testArgs{
|
tests := []testArgs{
|
||||||
{
|
{
|
||||||
@ -566,7 +566,7 @@ spec:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestServiceApply(t *testing.T) {
|
func TestServiceApply(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Service"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Service"))
|
||||||
|
|
||||||
tests := []testArgs{
|
tests := []testArgs{
|
||||||
{
|
{
|
||||||
@ -677,7 +677,7 @@ spec:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestReplicationControllerApply(t *testing.T) {
|
func TestReplicationControllerApply(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ReplicationController"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ReplicationController"))
|
||||||
|
|
||||||
tests := []testArgs{
|
tests := []testArgs{
|
||||||
{
|
{
|
||||||
@ -740,7 +740,7 @@ spec:
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPodApply(t *testing.T) {
|
func TestPodApply(t *testing.T) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
|
|
||||||
tests := []testArgs{
|
tests := []testArgs{
|
||||||
{
|
{
|
||||||
@ -917,7 +917,7 @@ spec:
|
|||||||
testConflicts(t, f, tests)
|
testConflicts(t, f, tests)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testConflicts(t *testing.T, f fieldmanagertest.TestFieldManager, tests []testArgs) {
|
func testConflicts(t *testing.T, f managedfieldstest.TestFieldManager, tests []testArgs) {
|
||||||
for i, test := range tests {
|
for i, test := range tests {
|
||||||
t.Run(fmt.Sprintf("test %d", i), func(t *testing.T) {
|
t.Run(fmt.Sprintf("test %d", i), func(t *testing.T) {
|
||||||
f.Reset()
|
f.Reset()
|
@ -26,8 +26,8 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
internaltesting "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/testing"
|
internaltesting "k8s.io/apimachinery/pkg/util/managedfields/internal/testing"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
@ -23,19 +23,19 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields/managedfieldstest"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) {
|
func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = updateObject(f, "fieldmanager_test", []byte(`{
|
err = updateObject(f, "fieldmanager_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -76,7 +76,7 @@ func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) {
|
|||||||
|
|
||||||
func TestManagedFieldsApplyDoesModifyTime(t *testing.T) {
|
func TestManagedFieldsApplyDoesModifyTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = applyObject(f, "fieldmanager_test", []byte(`{
|
err = applyObject(f, "fieldmanager_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -117,7 +117,7 @@ func TestManagedFieldsApplyDoesModifyTime(t *testing.T) {
|
|||||||
|
|
||||||
func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) {
|
func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = updateObject(f, "fieldmanager_test", []byte(`{
|
err = updateObject(f, "fieldmanager_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -158,7 +158,7 @@ func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) {
|
|||||||
|
|
||||||
func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) {
|
func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = applyObject(f, "fieldmanager_test", []byte(`{
|
err = applyObject(f, "fieldmanager_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -199,7 +199,7 @@ func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) {
|
|||||||
|
|
||||||
func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) {
|
func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = updateObject(f, "fieldmanager_a_test", []byte(`{
|
err = updateObject(f, "fieldmanager_a_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -262,7 +262,7 @@ func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) {
|
|||||||
|
|
||||||
func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) {
|
func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = applyObject(f, "fieldmanager_a_test", []byte(`{
|
err = applyObject(f, "fieldmanager_a_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -325,7 +325,7 @@ func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) {
|
|||||||
|
|
||||||
func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t *testing.T) {
|
func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = updateObject(f, "fieldmanager_a_test", []byte(`{
|
err = updateObject(f, "fieldmanager_a_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -376,7 +376,7 @@ func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t *
|
|||||||
|
|
||||||
func TestTakingOverManagedFieldsDuringApplyDoesNotModifyPreviousManagerTime(t *testing.T) {
|
func TestTakingOverManagedFieldsDuringApplyDoesNotModifyPreviousManagerTime(t *testing.T) {
|
||||||
var err error
|
var err error
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||||
|
|
||||||
err = applyObject(f, "fieldmanager_a_test", []byte(`{
|
err = applyObject(f, "fieldmanager_a_test", []byte(`{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@ -435,7 +435,7 @@ func (NoopManager) Update(liveObj, newObj runtime.Object, managed internal.Manag
|
|||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateObject(f fieldmanagertest.TestFieldManager, fieldManagerName string, object []byte) error {
|
func updateObject(f managedfieldstest.TestFieldManager, fieldManagerName string, object []byte) error {
|
||||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal(object, &obj.Object); err != nil {
|
if err := yaml.Unmarshal(object, &obj.Object); err != nil {
|
||||||
return fmt.Errorf("error decoding YAML: %v", err)
|
return fmt.Errorf("error decoding YAML: %v", err)
|
||||||
@ -446,7 +446,7 @@ func updateObject(f fieldmanagertest.TestFieldManager, fieldManagerName string,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyObject(f fieldmanagertest.TestFieldManager, fieldManagerName string, object []byte) error {
|
func applyObject(f managedfieldstest.TestFieldManager, fieldManagerName string, object []byte) error {
|
||||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||||
if err := yaml.Unmarshal(object, &obj.Object); err != nil {
|
if err := yaml.Unmarshal(object, &obj.Object); err != nil {
|
||||||
return fmt.Errorf("error decoding YAML: %v", err)
|
return fmt.Errorf("error decoding YAML: %v", err)
|
@ -24,8 +24,8 @@ import (
|
|||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
internaltesting "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/testing"
|
internaltesting "k8s.io/apimachinery/pkg/util/managedfields/internal/testing"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
@ -25,8 +25,8 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/typed"
|
"sigs.k8s.io/structured-merge-diff/v4/typed"
|
||||||
@ -138,7 +138,7 @@ func (f *TestFieldManagerImpl) ManagedFields() []metav1.ManagedFieldsEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewTestFieldManager creates a new manager for the given GVK.
|
// NewTestFieldManager creates a new manager for the given GVK.
|
||||||
func NewTestFieldManagerImpl(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind, subresource string, chainFieldManager func(internal.Manager) internal.Manager) *TestFieldManagerImpl {
|
func NewTestFieldManagerImpl(typeConverter managedfields.TypeConverter, gvk schema.GroupVersionKind, subresource string, chainFieldManager func(internal.Manager) internal.Manager) *TestFieldManagerImpl {
|
||||||
apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String())
|
apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String())
|
||||||
objectConverter := &fakeObjectConvertor{sameVersionConverter{}, apiVersion}
|
objectConverter := &fakeObjectConvertor{sameVersionConverter{}, apiVersion}
|
||||||
f, err := internal.NewStructuredMergeManager(
|
f, err := internal.NewStructuredMergeManager(
|
@ -14,14 +14,14 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package fieldmanagertest
|
package managedfieldstest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/testing"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestFieldManager is a FieldManager that can be used in test to
|
// TestFieldManager is a FieldManager that can be used in test to
|
||||||
@ -55,12 +55,12 @@ type TestFieldManager interface {
|
|||||||
|
|
||||||
// NewTestFieldManager returns a new TestFieldManager built for the
|
// NewTestFieldManager returns a new TestFieldManager built for the
|
||||||
// given gvk, on the main resource.
|
// given gvk, on the main resource.
|
||||||
func NewTestFieldManager(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind) TestFieldManager {
|
func NewTestFieldManager(typeConverter managedfields.TypeConverter, gvk schema.GroupVersionKind) TestFieldManager {
|
||||||
return testing.NewTestFieldManagerImpl(typeConverter, gvk, "", nil)
|
return testing.NewTestFieldManagerImpl(typeConverter, gvk, "", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTestFieldManagerSubresource returns a new TestFieldManager built
|
// NewTestFieldManagerSubresource returns a new TestFieldManager built
|
||||||
// for the given gvk, on the given sub-resource.
|
// for the given gvk, on the given sub-resource.
|
||||||
func NewTestFieldManagerSubresource(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind, subresource string) TestFieldManager {
|
func NewTestFieldManagerSubresource(typeConverter managedfields.TypeConverter, gvk schema.GroupVersionKind, subresource string) TestFieldManager {
|
||||||
return testing.NewTestFieldManagerImpl(typeConverter, gvk, subresource, nil)
|
return testing.NewTestFieldManagerImpl(typeConverter, gvk, subresource, nil)
|
||||||
}
|
}
|
261
staging/src/k8s.io/apimachinery/pkg/util/managedfields/node.yaml
Normal file
261
staging/src/k8s.io/apimachinery/pkg/util/managedfields/node.yaml
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Node
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
container.googleapis.com/instance_id: "123456789321654789"
|
||||||
|
node.alpha.kubernetes.io/ttl: "0"
|
||||||
|
volumes.kubernetes.io/controller-managed-attach-detach: "true"
|
||||||
|
creationTimestamp: "2019-07-09T16:17:29Z"
|
||||||
|
labels:
|
||||||
|
kubernetes.io/arch: amd64
|
||||||
|
beta.kubernetes.io/fluentd-ds-ready: "true"
|
||||||
|
beta.kubernetes.io/instance-type: n1-standard-4
|
||||||
|
kubernetes.io/os: linux
|
||||||
|
cloud.google.com/gke-nodepool: default-pool
|
||||||
|
cloud.google.com/gke-os-distribution: cos
|
||||||
|
failure-domain.beta.kubernetes.io/region: us-central1
|
||||||
|
failure-domain.beta.kubernetes.io/zone: us-central1-b
|
||||||
|
topology.kubernetes.io/region: us-central1
|
||||||
|
topology.kubernetes.io/zone: us-central1-b
|
||||||
|
kubernetes.io/hostname: node-default-pool-something
|
||||||
|
name: node-default-pool-something
|
||||||
|
resourceVersion: "211582541"
|
||||||
|
selfLink: /api/v1/nodes/node-default-pool-something
|
||||||
|
uid: 0c24d0e1-a265-11e9-abe4-42010a80026b
|
||||||
|
spec:
|
||||||
|
podCIDR: 10.0.0.1/24
|
||||||
|
providerID: some-provider-id-of-some-sort
|
||||||
|
status:
|
||||||
|
addresses:
|
||||||
|
- address: 10.0.0.1
|
||||||
|
type: InternalIP
|
||||||
|
- address: 192.168.0.1
|
||||||
|
type: ExternalIP
|
||||||
|
- address: node-default-pool-something
|
||||||
|
type: Hostname
|
||||||
|
allocatable:
|
||||||
|
cpu: 3920m
|
||||||
|
ephemeral-storage: "104638878617"
|
||||||
|
hugepages-2Mi: "0"
|
||||||
|
memory: 12700100Ki
|
||||||
|
pods: "110"
|
||||||
|
capacity:
|
||||||
|
cpu: "4"
|
||||||
|
ephemeral-storage: 202086868Ki
|
||||||
|
hugepages-2Mi: "0"
|
||||||
|
memory: 15399364Ki
|
||||||
|
pods: "110"
|
||||||
|
conditions:
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:22:08Z"
|
||||||
|
message: containerd is functioning properly
|
||||||
|
reason: FrequentContainerdRestart
|
||||||
|
status: "False"
|
||||||
|
type: FrequentContainerdRestart
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:22:06Z"
|
||||||
|
message: docker overlay2 is functioning properly
|
||||||
|
reason: CorruptDockerOverlay2
|
||||||
|
status: "False"
|
||||||
|
type: CorruptDockerOverlay2
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:22:06Z"
|
||||||
|
message: node is functioning properly
|
||||||
|
reason: UnregisterNetDevice
|
||||||
|
status: "False"
|
||||||
|
type: FrequentUnregisterNetDevice
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:04Z"
|
||||||
|
message: kernel has no deadlock
|
||||||
|
reason: KernelHasNoDeadlock
|
||||||
|
status: "False"
|
||||||
|
type: KernelDeadlock
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:04Z"
|
||||||
|
message: Filesystem is not read-only
|
||||||
|
reason: FilesystemIsNotReadOnly
|
||||||
|
status: "False"
|
||||||
|
type: ReadonlyFilesystem
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:22:05Z"
|
||||||
|
message: kubelet is functioning properly
|
||||||
|
reason: FrequentKubeletRestart
|
||||||
|
status: "False"
|
||||||
|
type: FrequentKubeletRestart
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:08Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:22:06Z"
|
||||||
|
message: docker is functioning properly
|
||||||
|
reason: FrequentDockerRestart
|
||||||
|
status: "False"
|
||||||
|
type: FrequentDockerRestart
|
||||||
|
- lastHeartbeatTime: "2019-07-09T16:17:47Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:47Z"
|
||||||
|
message: RouteController created a route
|
||||||
|
reason: RouteCreated
|
||||||
|
status: "False"
|
||||||
|
type: NetworkUnavailable
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:50Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:29Z"
|
||||||
|
message: kubelet has sufficient disk space available
|
||||||
|
reason: KubeletHasSufficientDisk
|
||||||
|
status: "False"
|
||||||
|
type: OutOfDisk
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:50Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:29Z"
|
||||||
|
message: kubelet has sufficient memory available
|
||||||
|
reason: KubeletHasSufficientMemory
|
||||||
|
status: "False"
|
||||||
|
type: MemoryPressure
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:50Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:29Z"
|
||||||
|
message: kubelet has no disk pressure
|
||||||
|
reason: KubeletHasNoDiskPressure
|
||||||
|
status: "False"
|
||||||
|
type: DiskPressure
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:50Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:29Z"
|
||||||
|
message: kubelet has sufficient PID available
|
||||||
|
reason: KubeletHasSufficientPID
|
||||||
|
status: "False"
|
||||||
|
type: PIDPressure
|
||||||
|
- lastHeartbeatTime: "2019-09-20T19:32:50Z"
|
||||||
|
lastTransitionTime: "2019-07-09T16:17:49Z"
|
||||||
|
message: kubelet is posting ready status. AppArmor enabled
|
||||||
|
reason: KubeletReady
|
||||||
|
status: "True"
|
||||||
|
type: Ready
|
||||||
|
daemonEndpoints:
|
||||||
|
kubeletEndpoint:
|
||||||
|
Port: 10250
|
||||||
|
images:
|
||||||
|
- names:
|
||||||
|
- grafana/grafana@sha256:80e5e113a984d74836aa16f5b4524012099436b1a50df293f00ac6377fb512c8
|
||||||
|
- grafana/grafana:4.4.2
|
||||||
|
sizeBytes: 287008013
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/node-problem-detector@sha256:f95cab985c26b2f46e9bd43283e0bfa88860c14e0fb0649266babe8b65e9eb2b
|
||||||
|
- registry.k8s.io/node-problem-detector:v0.4.1
|
||||||
|
sizeBytes: 286572743
|
||||||
|
- names:
|
||||||
|
- grafana/grafana@sha256:7ff7f9b2501a5d55b55ce3f58d21771b1c5af1f2a4ab7dbf11bef7142aae7033
|
||||||
|
- grafana/grafana:4.2.0
|
||||||
|
sizeBytes: 277940263
|
||||||
|
- names:
|
||||||
|
- influxdb@sha256:7dddf03376348876ed4bdf33d6dfa3326f45a2bae0930dbd80781a374eb519bc
|
||||||
|
- influxdb:1.2.2
|
||||||
|
sizeBytes: 223948571
|
||||||
|
- names:
|
||||||
|
- gcr.io/stackdriver-agents/stackdriver-logging-agent@sha256:f8d5231b67b9c53f60068b535a11811d29d1b3efd53d2b79f2a2591ea338e4f2
|
||||||
|
- gcr.io/stackdriver-agents/stackdriver-logging-agent:0.6-1.6.0-1
|
||||||
|
sizeBytes: 223242132
|
||||||
|
- names:
|
||||||
|
- nginx@sha256:35779791c05d119df4fe476db8f47c0bee5943c83eba5656a15fc046db48178b
|
||||||
|
- nginx:1.10.1
|
||||||
|
sizeBytes: 180708613
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/fluentd-elasticsearch@sha256:b8c94527b489fb61d3d81ce5ad7f3ddbb7be71e9620a3a36e2bede2f2e487d73
|
||||||
|
- registry.k8s.io/fluentd-elasticsearch:v2.0.4
|
||||||
|
sizeBytes: 135716379
|
||||||
|
- names:
|
||||||
|
- nginx@sha256:00be67d6ba53d5318cd91c57771530f5251cfbe028b7be2c4b70526f988cfc9f
|
||||||
|
- nginx:latest
|
||||||
|
sizeBytes: 109357355
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/kubernetes-dashboard-amd64@sha256:dc4026c1b595435ef5527ca598e1e9c4343076926d7d62b365c44831395adbd0
|
||||||
|
- registry.k8s.io/kubernetes-dashboard-amd64:v1.8.3
|
||||||
|
sizeBytes: 102319441
|
||||||
|
- names:
|
||||||
|
- gcr.io/google_containers/kube-proxy:v1.11.10-gke.5
|
||||||
|
- registry.k8s.io/kube-proxy:v1.11.10-gke.5
|
||||||
|
sizeBytes: 102279340
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/event-exporter@sha256:7f9cd7cb04d6959b0aa960727d04fa86759008048c785397b7b0d9dff0007516
|
||||||
|
- registry.k8s.io/event-exporter:v0.2.3
|
||||||
|
sizeBytes: 94171943
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/prometheus-to-sd@sha256:6c0c742475363d537ff059136e5d5e4ab1f512ee0fd9b7ca42ea48bc309d1662
|
||||||
|
- registry.k8s.io/prometheus-to-sd:v0.3.1
|
||||||
|
sizeBytes: 88077694
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/fluentd-gcp-scaler@sha256:a5ace7506d393c4ed65eb2cbb6312c64ab357fcea16dff76b9055bc6e498e5ff
|
||||||
|
- registry.k8s.io/fluentd-gcp-scaler:0.5.1
|
||||||
|
sizeBytes: 86637208
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/heapster-amd64@sha256:9fae0af136ce0cf4f88393b3670f7139ffc464692060c374d2ae748e13144521
|
||||||
|
- registry.k8s.io/heapster-amd64:v1.6.0-beta.1
|
||||||
|
sizeBytes: 76016169
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/ingress-glbc-amd64@sha256:31d36bbd9c44caffa135fc78cf0737266fcf25e3cf0cd1c2fcbfbc4f7309cc52
|
||||||
|
- registry.k8s.io/ingress-glbc-amd64:v1.1.1
|
||||||
|
sizeBytes: 67801919
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/kube-addon-manager@sha256:d53486c3a0b49ebee019932878dc44232735d5622a51dbbdcec7124199020d09
|
||||||
|
- registry.k8s.io/kube-addon-manager:v8.7
|
||||||
|
sizeBytes: 63322109
|
||||||
|
- names:
|
||||||
|
- nginx@sha256:4aacdcf186934dcb02f642579314075910f1855590fd3039d8fa4c9f96e48315
|
||||||
|
- nginx:1.10-alpine
|
||||||
|
sizeBytes: 54042627
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/cpvpa-amd64@sha256:cfe7b0a11c9c8e18c87b1eb34fef9a7cbb8480a8da11fc2657f78dbf4739f869
|
||||||
|
- registry.k8s.io/cpvpa-amd64:v0.6.0
|
||||||
|
sizeBytes: 51785854
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/cluster-proportional-autoscaler-amd64@sha256:003f98d9f411ddfa6ff6d539196355e03ddd69fa4ed38c7ffb8fec6f729afe2d
|
||||||
|
- registry.k8s.io/cluster-proportional-autoscaler-amd64:1.1.2-r2
|
||||||
|
sizeBytes: 49648481
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/ip-masq-agent-amd64@sha256:1ffda57d87901bc01324c82ceb2145fe6a0448d3f0dd9cb65aa76a867cd62103
|
||||||
|
- registry.k8s.io/ip-masq-agent-amd64:v2.1.1
|
||||||
|
sizeBytes: 49612505
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/k8s-dns-kube-dns-amd64@sha256:b99fc3eee2a9f052f7eb4cc00f15eb12fc405fa41019baa2d6b79847ae7284a8
|
||||||
|
- registry.k8s.io/k8s-dns-kube-dns-amd64:1.14.10
|
||||||
|
sizeBytes: 49549457
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/rescheduler@sha256:156cfbfd05a5a815206fd2eeb6cbdaf1596d71ea4b415d3a6c43071dd7b99450
|
||||||
|
- registry.k8s.io/rescheduler:v0.4.0
|
||||||
|
sizeBytes: 48973149
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/event-exporter@sha256:16ca66e2b5dc7a1ce6a5aafcb21d0885828b75cdfc08135430480f7ad2364adc
|
||||||
|
- registry.k8s.io/event-exporter:v0.2.4
|
||||||
|
sizeBytes: 47261019
|
||||||
|
- names:
|
||||||
|
- registry.k8s.io/coredns@sha256:db2bf53126ed1c761d5a41f24a1b82a461c85f736ff6e90542e9522be4757848
|
||||||
|
- registry.k8s.io/coredns:1.1.3
|
||||||
|
sizeBytes: 45587362
|
||||||
|
- names:
|
||||||
|
- prom/prometheus@sha256:483f4c9d7733699ba79facca9f8bcce1cef1af43dfc3e7c5a1882aa85f53cb74
|
||||||
|
- prom/prometheus:v1.1.3
|
||||||
|
sizeBytes: 45493941
|
||||||
|
nodeInfo:
|
||||||
|
architecture: amd64
|
||||||
|
bootID: a32eca78-4ad4-4b76-9252-f143d6c2ae61
|
||||||
|
containerRuntimeVersion: docker://17.3.2
|
||||||
|
kernelVersion: 4.14.127+
|
||||||
|
kubeProxyVersion: v1.11.10-gke.5
|
||||||
|
kubeletVersion: v1.11.10-gke.5
|
||||||
|
machineID: 1739555e5b231057f0f9a0b5fa29511b
|
||||||
|
operatingSystem: linux
|
||||||
|
osImage: Container-Optimized OS from Google
|
||||||
|
systemUUID: 1739555E-5B23-1057-F0F9-A0B5FA29511B
|
||||||
|
volumesAttached:
|
||||||
|
- devicePath: /dev/disk/by-id/b9772-pvc-c787c67d-14d7-11e7-9baf-42010a800049
|
||||||
|
name: kubernetes.io/pd/some-random-clusterb9772-pvc-c787c67d-14d7-11e7-9baf-42010a800049
|
||||||
|
- devicePath: /dev/disk/by-id/b9772-pvc-8895a852-fd42-11e6-94d4-42010a800049
|
||||||
|
name: kubernetes.io/pd/some-random-clusterb9772-pvc-8895a852-fd42-11e6-94d4-42010a800049
|
||||||
|
- devicePath: /dev/disk/by-id/some-random-clusterb9772-pvc-72e1c7f1-fd41-11e6-94d4-42010a800049
|
||||||
|
name: kubernetes.io/pd/some-random-clusterb9772-pvc-72e1c7f1-fd41-11e6-94d4-42010a800049
|
||||||
|
- devicePath: /dev/disk/by-id/some-random-clusterb9772-pvc-c2435a06-14d7-11e7-9baf-42010a800049
|
||||||
|
name: kubernetes.io/pd/some-random-clusterb9772-pvc-c2435a06-14d7-11e7-9baf-42010a800049
|
||||||
|
- devicePath: /dev/disk/by-id/some-random-clusterb9772-pvc-8bf50554-fd42-11e6-94d4-42010a800049
|
||||||
|
name: kubernetes.io/pd/some-random-clusterb9772-pvc-8bf50554-fd42-11e6-94d4-42010a800049
|
||||||
|
- devicePath: /dev/disk/by-id/some-random-clusterb9772-pvc-8fb5e386-4641-11e7-a490-42010a800283
|
||||||
|
name: kubernetes.io/pd/some-random-clusterb9772-pvc-8fb5e386-4641-11e7-a490-42010a800283
|
||||||
|
volumesInUse:
|
||||||
|
- kubernetes.io/pd/some-random-clusterb9772-pvc-72e1c7f1-fd41-11e6-94d4-42010a800049
|
||||||
|
- kubernetes.io/pd/some-random-clusterb9772-pvc-8895a852-fd42-11e6-94d4-42010a800049
|
||||||
|
- kubernetes.io/pd/some-random-clusterb9772-pvc-8bf50554-fd42-11e6-94d4-42010a800049
|
||||||
|
- kubernetes.io/pd/some-random-clusterb9772-pvc-8fb5e386-4641-11e7-a490-42010a800283
|
||||||
|
- kubernetes.io/pd/some-random-clusterb9772-pvc-c2435a06-14d7-11e7-9baf-42010a800049
|
||||||
|
- kubernetes.io/pd/some-random-clusterb9772-pvc-c787c67d-14d7-11e7-9baf-42010a800049
|
121
staging/src/k8s.io/apimachinery/pkg/util/managedfields/pod.yaml
Normal file
121
staging/src/k8s.io/apimachinery/pkg/util/managedfields/pod.yaml
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: some-app
|
||||||
|
plugin1: some-value
|
||||||
|
plugin2: some-value
|
||||||
|
plugin3: some-value
|
||||||
|
plugin4: some-value
|
||||||
|
name: some-name
|
||||||
|
namespace: default
|
||||||
|
ownerReferences:
|
||||||
|
- apiVersion: apps/v1
|
||||||
|
blockOwnerDeletion: true
|
||||||
|
controller: true
|
||||||
|
kind: ReplicaSet
|
||||||
|
name: some-name
|
||||||
|
uid: 0a9d2b9e-779e-11e7-b422-42010a8001be
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- args:
|
||||||
|
- one
|
||||||
|
- two
|
||||||
|
- three
|
||||||
|
- four
|
||||||
|
- five
|
||||||
|
- six
|
||||||
|
- seven
|
||||||
|
- eight
|
||||||
|
- nine
|
||||||
|
env:
|
||||||
|
- name: VAR_3
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: some-other-key
|
||||||
|
name: some-oher-name
|
||||||
|
- name: VAR_2
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: other-key
|
||||||
|
name: other-name
|
||||||
|
- name: VAR_1
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
key: some-key
|
||||||
|
name: some-name
|
||||||
|
image: some-image-name
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
name: some-name
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: '0'
|
||||||
|
terminationMessagePath: /dev/termination-log
|
||||||
|
terminationMessagePolicy: File
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
|
||||||
|
name: default-token-hu5jz
|
||||||
|
readOnly: true
|
||||||
|
dnsPolicy: ClusterFirst
|
||||||
|
nodeName: node-name
|
||||||
|
priority: 0
|
||||||
|
restartPolicy: Always
|
||||||
|
schedulerName: default-scheduler
|
||||||
|
securityContext: {}
|
||||||
|
serviceAccount: default
|
||||||
|
serviceAccountName: default
|
||||||
|
terminationGracePeriodSeconds: 30
|
||||||
|
tolerations:
|
||||||
|
- effect: NoExecute
|
||||||
|
key: node.kubernetes.io/not-ready
|
||||||
|
operator: Exists
|
||||||
|
tolerationSeconds: 300
|
||||||
|
- effect: NoExecute
|
||||||
|
key: node.kubernetes.io/unreachable
|
||||||
|
operator: Exists
|
||||||
|
tolerationSeconds: 300
|
||||||
|
volumes:
|
||||||
|
- name: default-token-hu5jz
|
||||||
|
secret:
|
||||||
|
defaultMode: 420
|
||||||
|
secretName: default-token-hu5jz
|
||||||
|
status:
|
||||||
|
conditions:
|
||||||
|
- lastProbeTime: null
|
||||||
|
lastTransitionTime: '2019-07-08T09:31:18Z'
|
||||||
|
status: 'True'
|
||||||
|
type: Initialized
|
||||||
|
- lastProbeTime: null
|
||||||
|
lastTransitionTime: '2019-07-08T09:41:59Z'
|
||||||
|
status: 'True'
|
||||||
|
type: Ready
|
||||||
|
- lastProbeTime: null
|
||||||
|
lastTransitionTime: null
|
||||||
|
status: 'True'
|
||||||
|
type: ContainersReady
|
||||||
|
- lastProbeTime: null
|
||||||
|
lastTransitionTime: '2019-07-08T09:31:18Z'
|
||||||
|
status: 'True'
|
||||||
|
type: PodScheduled
|
||||||
|
containerStatuses:
|
||||||
|
- containerID: docker://885e82a1ed0b7356541bb410a0126921ac42439607c09875cd8097dd5d7b5376
|
||||||
|
image: some-image-name
|
||||||
|
imageID: docker-pullable://some-image-id
|
||||||
|
lastState:
|
||||||
|
terminated:
|
||||||
|
containerID: docker://d57290f9e00fad626b20d2dd87a3cf69bbc22edae07985374f86a8b2b4e39565
|
||||||
|
exitCode: 255
|
||||||
|
finishedAt: '2019-07-08T09:39:09Z'
|
||||||
|
reason: Error
|
||||||
|
startedAt: '2019-07-08T09:38:54Z'
|
||||||
|
name: name
|
||||||
|
ready: true
|
||||||
|
restartCount: 6
|
||||||
|
state:
|
||||||
|
running:
|
||||||
|
startedAt: '2019-07-08T09:41:59Z'
|
||||||
|
hostIP: 10.0.0.1
|
||||||
|
phase: Running
|
||||||
|
podIP: 10.0.0.1
|
||||||
|
qosClass: BestEffort
|
||||||
|
startTime: '2019-07-08T09:31:18Z'
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package fieldmanager
|
package managedfields
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -23,7 +23,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
)
|
)
|
||||||
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package fieldmanager
|
package managedfields
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
@ -14,10 +14,10 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package fieldmanager
|
package managedfields
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
"k8s.io/apimachinery/pkg/util/managedfields/internal"
|
||||||
"k8s.io/kube-openapi/pkg/validation/spec"
|
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||||
)
|
)
|
||||||
|
|
@ -27,11 +27,11 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
"k8s.io/apiserver/pkg/endpoints/discovery"
|
"k8s.io/apiserver/pkg/endpoints/discovery"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
"k8s.io/apiserver/pkg/storageversion"
|
"k8s.io/apiserver/pkg/storageversion"
|
||||||
)
|
)
|
||||||
@ -81,7 +81,7 @@ type APIGroupVersion struct {
|
|||||||
Defaulter runtime.ObjectDefaulter
|
Defaulter runtime.ObjectDefaulter
|
||||||
Namer runtime.Namer
|
Namer runtime.Namer
|
||||||
UnsafeConvertor runtime.ObjectConvertor
|
UnsafeConvertor runtime.ObjectConvertor
|
||||||
TypeConverter fieldmanager.TypeConverter
|
TypeConverter managedfields.TypeConverter
|
||||||
|
|
||||||
EquivalentResourceRegistry runtime.EquivalentResourceRegistry
|
EquivalentResourceRegistry runtime.EquivalentResourceRegistry
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/warning"
|
"k8s.io/apiserver/pkg/warning"
|
||||||
)
|
)
|
||||||
@ -70,7 +71,7 @@ func (admit *managedFieldsValidatingAdmissionController) Admit(ctx context.Conte
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
managedFieldsAfterAdmission := objectMeta.GetManagedFields()
|
managedFieldsAfterAdmission := objectMeta.GetManagedFields()
|
||||||
if err := ValidateManagedFields(managedFieldsAfterAdmission); err != nil {
|
if err := managedfields.ValidateManagedFields(managedFieldsAfterAdmission); err != nil {
|
||||||
objectMeta.SetManagedFields(managedFieldsBeforeAdmission)
|
objectMeta.SetManagedFields(managedFieldsBeforeAdmission)
|
||||||
warning.AddWarning(ctx, "",
|
warning.AddWarning(ctx, "",
|
||||||
fmt.Sprintf(InvalidManagedFieldsAfterMutatingAdmissionWarningFormat,
|
fmt.Sprintf(InvalidManagedFieldsAfterMutatingAdmissionWarningFormat,
|
||||||
|
@ -17,7 +17,11 @@ limitations under the License.
|
|||||||
package fieldmanager_test
|
package fieldmanager_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
@ -27,10 +31,42 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields/managedfieldstest"
|
||||||
|
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var fakeTypeConverter = func() managedfields.TypeConverter {
|
||||||
|
data, err := ioutil.ReadFile(filepath.Join(strings.Repeat(".."+string(filepath.Separator), 8),
|
||||||
|
"api", "openapi-spec", "swagger.json"))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
swagger := spec.Swagger{}
|
||||||
|
if err := json.Unmarshal(data, &swagger); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
definitions := map[string]*spec.Schema{}
|
||||||
|
for k, v := range swagger.Definitions {
|
||||||
|
p := v
|
||||||
|
definitions[k] = &p
|
||||||
|
}
|
||||||
|
typeConverter, err := managedfields.NewTypeConverter(definitions, false)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return typeConverter
|
||||||
|
}()
|
||||||
|
|
||||||
|
func getObjectBytes(file string) []byte {
|
||||||
|
s, err := ioutil.ReadFile(file)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkNewObject(b *testing.B) {
|
func BenchmarkNewObject(b *testing.B) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
gvk schema.GroupVersionKind
|
gvk schema.GroupVersionKind
|
||||||
@ -55,7 +91,7 @@ func BenchmarkNewObject(b *testing.B) {
|
|||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
b.Run(test.gvk.Kind, func(b *testing.B) {
|
b.Run(test.gvk.Kind, func(b *testing.B) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, test.gvk)
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, test.gvk)
|
||||||
|
|
||||||
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion())
|
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion())
|
||||||
newObj, err := runtime.Decode(decoder, test.obj)
|
newObj, err := runtime.Decode(decoder, test.obj)
|
||||||
@ -268,7 +304,7 @@ func BenchmarkCompare(b *testing.B) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRepeatedUpdate(b *testing.B) {
|
func BenchmarkRepeatedUpdate(b *testing.B) {
|
||||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
f := managedfieldstest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||||
podBytes := getObjectBytes("pod.yaml")
|
podBytes := getObjectBytes("pod.yaml")
|
||||||
|
|
||||||
var obj *corev1.Pod
|
var obj *corev1.Pod
|
||||||
|
@ -36,6 +36,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apimachinery/pkg/util/mergepatch"
|
"k8s.io/apimachinery/pkg/util/mergepatch"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
||||||
@ -297,7 +298,7 @@ type patchMechanism interface {
|
|||||||
type jsonPatcher struct {
|
type jsonPatcher struct {
|
||||||
*patcher
|
*patcher
|
||||||
|
|
||||||
fieldManager *fieldmanager.FieldManager
|
fieldManager *managedfields.FieldManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *jsonPatcher) applyPatchToCurrentObject(requestContext context.Context, currentObject runtime.Object) (runtime.Object, error) {
|
func (p *jsonPatcher) applyPatchToCurrentObject(requestContext context.Context, currentObject runtime.Object) (runtime.Object, error) {
|
||||||
@ -417,7 +418,7 @@ type smpPatcher struct {
|
|||||||
|
|
||||||
// Schema
|
// Schema
|
||||||
schemaReferenceObj runtime.Object
|
schemaReferenceObj runtime.Object
|
||||||
fieldManager *fieldmanager.FieldManager
|
fieldManager *managedfields.FieldManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *smpPatcher) applyPatchToCurrentObject(requestContext context.Context, currentObject runtime.Object) (runtime.Object, error) {
|
func (p *smpPatcher) applyPatchToCurrentObject(requestContext context.Context, currentObject runtime.Object) (runtime.Object, error) {
|
||||||
@ -455,7 +456,7 @@ type applyPatcher struct {
|
|||||||
options *metav1.PatchOptions
|
options *metav1.PatchOptions
|
||||||
creater runtime.ObjectCreater
|
creater runtime.ObjectCreater
|
||||||
kind schema.GroupVersionKind
|
kind schema.GroupVersionKind
|
||||||
fieldManager *fieldmanager.FieldManager
|
fieldManager *managedfields.FieldManager
|
||||||
userAgent string
|
userAgent string
|
||||||
validationDirective string
|
validationDirective string
|
||||||
}
|
}
|
||||||
|
@ -38,9 +38,9 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
|
||||||
requestmetrics "k8s.io/apiserver/pkg/endpoints/handlers/metrics"
|
requestmetrics "k8s.io/apiserver/pkg/endpoints/handlers/metrics"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
|
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
|
||||||
"k8s.io/apiserver/pkg/endpoints/metrics"
|
"k8s.io/apiserver/pkg/endpoints/metrics"
|
||||||
@ -89,7 +89,7 @@ type RequestScope struct {
|
|||||||
EquivalentResourceMapper runtime.EquivalentResourceMapper
|
EquivalentResourceMapper runtime.EquivalentResourceMapper
|
||||||
|
|
||||||
TableConvertor rest.TableConvertor
|
TableConvertor rest.TableConvertor
|
||||||
FieldManager *fieldmanager.FieldManager
|
FieldManager *managedfields.FieldManager
|
||||||
|
|
||||||
Resource schema.GroupVersionResource
|
Resource schema.GroupVersionResource
|
||||||
Kind schema.GroupVersionKind
|
Kind schema.GroupVersionKind
|
||||||
|
@ -32,12 +32,12 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/endpoints/deprecation"
|
"k8s.io/apiserver/pkg/endpoints/deprecation"
|
||||||
"k8s.io/apiserver/pkg/endpoints/discovery"
|
"k8s.io/apiserver/pkg/endpoints/discovery"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers"
|
"k8s.io/apiserver/pkg/endpoints/handlers"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
|
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
|
||||||
"k8s.io/apiserver/pkg/endpoints/metrics"
|
"k8s.io/apiserver/pkg/endpoints/metrics"
|
||||||
utilwarning "k8s.io/apiserver/pkg/endpoints/warning"
|
utilwarning "k8s.io/apiserver/pkg/endpoints/warning"
|
||||||
@ -683,7 +683,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
resetFields = resetFieldsStrategy.GetResetFields()
|
resetFields = resetFieldsStrategy.GetResetFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
reqScope.FieldManager, err = fieldmanager.NewDefaultFieldManager(
|
reqScope.FieldManager, err = managedfields.NewDefaultFieldManager(
|
||||||
a.group.TypeConverter,
|
a.group.TypeConverter,
|
||||||
a.group.UnsafeConvertor,
|
a.group.UnsafeConvertor,
|
||||||
a.group.Defaulter,
|
a.group.Defaulter,
|
||||||
|
@ -34,6 +34,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup"
|
utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup"
|
||||||
@ -44,7 +45,6 @@ import (
|
|||||||
genericapi "k8s.io/apiserver/pkg/endpoints"
|
genericapi "k8s.io/apiserver/pkg/endpoints"
|
||||||
"k8s.io/apiserver/pkg/endpoints/discovery"
|
"k8s.io/apiserver/pkg/endpoints/discovery"
|
||||||
discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated"
|
discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
|
||||||
"k8s.io/apiserver/pkg/features"
|
"k8s.io/apiserver/pkg/features"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
"k8s.io/apiserver/pkg/server/healthz"
|
"k8s.io/apiserver/pkg/server/healthz"
|
||||||
@ -737,11 +737,11 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}, shutdow
|
|||||||
|
|
||||||
// installAPIResources is a private method for installing the REST storage backing each api groupversionresource
|
// installAPIResources is a private method for installing the REST storage backing each api groupversionresource
|
||||||
func (s *GenericAPIServer) installAPIResources(apiPrefix string, apiGroupInfo *APIGroupInfo, openAPIModels map[string]*spec.Schema) error {
|
func (s *GenericAPIServer) installAPIResources(apiPrefix string, apiGroupInfo *APIGroupInfo, openAPIModels map[string]*spec.Schema) error {
|
||||||
var typeConverter fieldmanager.TypeConverter
|
var typeConverter managedfields.TypeConverter
|
||||||
|
|
||||||
if len(openAPIModels) > 0 {
|
if len(openAPIModels) > 0 {
|
||||||
var err error
|
var err error
|
||||||
typeConverter, err = fieldmanager.NewTypeConverter(openAPIModels, false)
|
typeConverter, err = managedfields.NewTypeConverter(openAPIModels, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
v1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
|
v1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
||||||
@ -169,7 +170,7 @@ func TestMutatingWebhookResetsInvalidManagedFields(t *testing.T) {
|
|||||||
// validate against both decoding and validation to make sure we use the hardest rule between the both to reset
|
// validate against both decoding and validation to make sure we use the hardest rule between the both to reset
|
||||||
// with decoding being as strict as it gets, only using it should be enough in admission
|
// with decoding being as strict as it gets, only using it should be enough in admission
|
||||||
func validateManagedFieldsAndDecode(managedFields []metav1.ManagedFieldsEntry) error {
|
func validateManagedFieldsAndDecode(managedFields []metav1.ManagedFieldsEntry) error {
|
||||||
if err := fieldmanager.ValidateManagedFields(managedFields); err != nil {
|
if err := managedfields.ValidateManagedFields(managedFields); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
deploymentstorage "k8s.io/kubernetes/pkg/registry/apps/deployment/storage"
|
deploymentstorage "k8s.io/kubernetes/pkg/registry/apps/deployment/storage"
|
||||||
@ -279,7 +279,7 @@ func TestScaleUpdateOnlyStatus(t *testing.T) {
|
|||||||
func TestAllKnownVersionsAreInMappings(t *testing.T) {
|
func TestAllKnownVersionsAreInMappings(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
groupKind schema.GroupKind
|
groupKind schema.GroupKind
|
||||||
mappings fieldmanager.ResourcePathMappings
|
mappings managedfields.ResourcePathMappings
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
groupKind: schema.GroupKind{Group: "apps", Kind: "ReplicaSet"},
|
groupKind: schema.GroupKind{Group: "apps", Kind: "ReplicaSet"},
|
||||||
|
@ -29,12 +29,13 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
||||||
k8stest "k8s.io/kubernetes/pkg/api/testing"
|
k8stest "k8s.io/kubernetes/pkg/api/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func convertToUnstructured(b *testing.B, obj runtime.Object) runtime.Object {
|
func convertToUnstructured(b *testing.B, obj runtime.Object) runtime.Object {
|
||||||
converter := fieldmanager.NewDeducedTypeConverter()
|
converter := managedfields.NewDeducedTypeConverter()
|
||||||
typed, err := converter.ObjectToTyped(obj)
|
typed, err := converter.ObjectToTyped(obj)
|
||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
res, err := converter.TypedToObject(typed)
|
res, err := converter.TypedToObject(typed)
|
||||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -1361,6 +1361,7 @@ k8s.io/apimachinery/pkg/util/intstr
|
|||||||
k8s.io/apimachinery/pkg/util/json
|
k8s.io/apimachinery/pkg/util/json
|
||||||
k8s.io/apimachinery/pkg/util/jsonmergepatch
|
k8s.io/apimachinery/pkg/util/jsonmergepatch
|
||||||
k8s.io/apimachinery/pkg/util/managedfields
|
k8s.io/apimachinery/pkg/util/managedfields
|
||||||
|
k8s.io/apimachinery/pkg/util/managedfields/internal
|
||||||
k8s.io/apimachinery/pkg/util/mergepatch
|
k8s.io/apimachinery/pkg/util/mergepatch
|
||||||
k8s.io/apimachinery/pkg/util/naming
|
k8s.io/apimachinery/pkg/util/naming
|
||||||
k8s.io/apimachinery/pkg/util/net
|
k8s.io/apimachinery/pkg/util/net
|
||||||
@ -1466,7 +1467,6 @@ k8s.io/apiserver/pkg/endpoints/filterlatency
|
|||||||
k8s.io/apiserver/pkg/endpoints/filters
|
k8s.io/apiserver/pkg/endpoints/filters
|
||||||
k8s.io/apiserver/pkg/endpoints/handlers
|
k8s.io/apiserver/pkg/endpoints/handlers
|
||||||
k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager
|
k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager
|
||||||
k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal
|
|
||||||
k8s.io/apiserver/pkg/endpoints/handlers/finisher
|
k8s.io/apiserver/pkg/endpoints/handlers/finisher
|
||||||
k8s.io/apiserver/pkg/endpoints/handlers/metrics
|
k8s.io/apiserver/pkg/endpoints/handlers/metrics
|
||||||
k8s.io/apiserver/pkg/endpoints/handlers/negotiation
|
k8s.io/apiserver/pkg/endpoints/handlers/negotiation
|
||||||
|
Loading…
Reference in New Issue
Block a user