Compare commits

...

19 Commits

Author SHA1 Message Date
Kubernetes Publisher
a2642abd5c Update dependencies to v0.21.4 tag 2021-08-12 00:21:26 +00:00
Kubernetes Publisher
ccdebc23f7 Merge pull request #103614 from dprotaso/automated-cherry-pick-of-#102928-upstream-release-1.21
Automated cherry pick of #102928: Simplify use of the fake dynamic client

Kubernetes-commit: b37bb672191c180fe8bf44e3c023469a47583383
2021-07-29 06:37:34 +00:00
Kubernetes Publisher
fefd2ad85b Merge pull request #103319 from jpbetz/fix-102749-1.21
Manual cherry pick of #103318: Bump SMD to v4.1.2 to pick up #102749 fix

Kubernetes-commit: c17d7c574149af1619dc8edd9c48a41dc07695e8
2021-07-12 06:36:39 +00:00
Joe Betz
58234552b9 Bump SMD to v4.1.2 to pick up #102749 fix
Kubernetes-commit: 44d4c4fe69f9fd2ee7bade2d15c8bab6be3ec98e
2021-06-29 18:55:34 -07:00
dprotaso
46c1ad3baa Simplify use of the fake dynamic client
With the introduction of GVK to the fake dynamic client it made using
the fake much more cumbersome.

Specifically:
- requires manual registration of list types
- mismatch between scheme types and passed in fixtures would result in errors

The PR changes the constructor method NewSimpleDynamicClient to do the following:
- rewire the schemes to unstructured types
- typed fixtures are converted to unstructured types
- automatically register fixture gvks with the scheme

This should make the dynamic client 'flexible' with it's inputs like it was
before

Kubernetes-commit: d4da53771f429b05c69f628565fc9353972e5e6a
2021-06-16 14:51:00 -04:00
Kubernetes Publisher
3c428dfbaa Merge pull request #102800 from pohly/automated-cherry-pick-of-#102788-upstream-release-1.21
Automated cherry pick of #102788: client-go: reduce log level of reflector again

Kubernetes-commit: 05c4b151cf6d1d5dc05a45897f5975489ccafc70
2021-06-11 12:03:02 -07:00
Patrick Ohly
fe825e6964 client-go: reduce log level of reflector again
https://github.com/kubernetes/kubernetes/pull/87795 most likely
unintentionally increased the log level of "Starting reflector" and
"Stopping reflector", with the result that since Kubernetes 1.21
clients have printed that message by default. This is undesirable, we
should use the original level 3 again.

Kubernetes-commit: ef0beb2cf7091f3c1c837af63120cb8ce9f084bc
2021-06-10 20:36:02 +02:00
Kubernetes Publisher
6277e972ff sync: remove Godeps/ 2021-06-09 12:16:40 +00:00
Kubernetes Publisher
b63b1ba7e4 Merge pull request #102587 from saschagrunert/release-1.21
Revert "Cleanup portforward streams after their usage" [1.21]

Kubernetes-commit: e6824bbd0c2a669a049cc54f6e3d824d43b84f5f
2021-06-04 20:13:56 +00:00
Sascha Grunert
c18505fdb8 Revert "Cleanup portforward streams after their usage"
This reverts commit b14bd44f33d93e1ee64c1d68fa7591d79eac5893.

A regression has been introduced with this patch. The strategy is to
apply the fix on master and revert on the release branches.

Kubernetes-commit: 154a5538a5c43f30c3942055e7432cbe4c864f2c
2021-06-04 08:54:19 +02:00
Kubernetes Publisher
ffd8cfc563 Merge pull request #102196 from kolyshkin/automated-cherry-pick-of-#102147-upstream-release-1.21
Automated cherry pick of #102147: vendor: bump runc to rc95

Kubernetes-commit: 133f66aa603c4624ff3544f26f54a153a54c6f94
2021-05-21 23:17:53 +00:00
Kir Kolyshkin
a802afb537 vendor: bump runc to rc95
runc rc95 contains a fix for CVE-2021-30465.

runc rc94 provides fixes and improvements.

One notable change is cgroup manager's Set now accept Resources rather
than Cgroup (see https://github.com/opencontainers/runc/pull/2906).
Modify the code accordingly.

Also update runc dependencies (as hinted by hack/lint-depdendencies.sh):

        github.com/cilium/ebpf v0.5.0
        github.com/containerd/console v1.0.2
        github.com/coreos/go-systemd/v22 v22.3.1
        github.com/godbus/dbus/v5 v5.0.4
        github.com/moby/sys/mountinfo v0.4.1
        golang.org/x/sys v0.0.0-20210426230700-d19ff857e887
        github.com/google/go-cmp v0.5.4
        github.com/kr/pretty v0.2.1
        github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>

Kubernetes-commit: 5eea5478ae4859f2d66135d086b9675361d8d2a8
2021-05-19 09:59:29 -07:00
Kubernetes Publisher
c04de5262a Merge pull request #100951 from saschagrunert/automated-cherry-pick-of-#99839-upstream-release-1.21
Automated cherry pick of #99839: Cleanup portforward streams after their usage

Kubernetes-commit: 9745a35d15c40607d94424776cc84a130c64d75f
2021-05-18 11:04:14 +00:00
Sascha Grunert
322fe85e85 Cleanup portforward streams after their usage
This implements a stream cleanup when using portforwardings. Before
applying this patch, the streams []httpstream.Stream within
`spdy/connection.go` would fill-up for each streaming request. This
could result in heavy memory usage. Now we use the stream identifier to
keep track of them and finally remove them again once they're no longer
needed.

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>

Kubernetes-commit: b14bd44f33d93e1ee64c1d68fa7591d79eac5893
2021-03-05 13:39:04 +01:00
Kubernetes Publisher
0f9967bf69 sync: update go.mod 2021-04-17 16:07:08 +00:00
Kubernetes Publisher
307e3a38a1 Merge pull request #100718 from dims/automated-cherry-pick-of-#100606-#100660-upstream-release-1.21-take-2
Automated cherry pick of #100606 #100660 upstream release 1.21

Kubernetes-commit: 1b217e53de7348da4785624b419a2eea5151d03d
2021-04-01 15:22:02 +00:00
Davanum Srinivas
a124236e6c Common auth plugins should always be available
Whether `providerless` is present or not, the OIDC plugin
should be available.

Signed-off-by: Davanum Srinivas <davanum@gmail.com>

Kubernetes-commit: 2b71b5349a0744b16a367eb7ac7a44f9ae2079aa
2021-03-30 06:09:56 -04:00
Davanum Srinivas
ac49e87f5a providerless tag for client-go auth plugins
Signed-off-by: Davanum Srinivas <davanum@gmail.com>

Kubernetes-commit: c77bf835b8409da66d4f2a220c92a902d0888f9c
2021-03-28 20:05:32 -04:00
Kubernetes Publisher
6be0785e0e Merge pull request #100156 from ehashman/issue-100155
Upgrade klog to avoid panics crashing components

Kubernetes-commit: 998f218606a149048e7b564ef27478bacab0f90f
2021-03-29 11:25:28 +00:00
10 changed files with 276 additions and 551 deletions

522
Godeps/Godeps.json generated
View File

@@ -1,522 +0,0 @@
{
"ImportPath": "k8s.io/client-go",
"GoVersion": "unknown",
"GodepVersion": "gen-godeps",
"Packages": [
"./..."
],
"Deps": [
{
"ImportPath": "cloud.google.com/go",
"Rev": "v0.54.0"
},
{
"ImportPath": "cloud.google.com/go/bigquery",
"Rev": "v1.4.0"
},
{
"ImportPath": "cloud.google.com/go/datastore",
"Rev": "v1.1.0"
},
{
"ImportPath": "cloud.google.com/go/pubsub",
"Rev": "v1.2.0"
},
{
"ImportPath": "cloud.google.com/go/storage",
"Rev": "v1.6.0"
},
{
"ImportPath": "dmitri.shuralyov.com/gpu/mtl",
"Rev": "666a987793e9"
},
{
"ImportPath": "github.com/Azure/go-autorest",
"Rev": "v14.2.0"
},
{
"ImportPath": "github.com/Azure/go-autorest/autorest",
"Rev": "v0.11.12"
},
{
"ImportPath": "github.com/Azure/go-autorest/autorest/adal",
"Rev": "v0.9.5"
},
{
"ImportPath": "github.com/Azure/go-autorest/autorest/date",
"Rev": "v0.3.0"
},
{
"ImportPath": "github.com/Azure/go-autorest/autorest/mocks",
"Rev": "v0.4.1"
},
{
"ImportPath": "github.com/Azure/go-autorest/logger",
"Rev": "v0.2.0"
},
{
"ImportPath": "github.com/Azure/go-autorest/tracing",
"Rev": "v0.6.0"
},
{
"ImportPath": "github.com/BurntSushi/toml",
"Rev": "v0.3.1"
},
{
"ImportPath": "github.com/BurntSushi/xgb",
"Rev": "27f122750802"
},
{
"ImportPath": "github.com/NYTimes/gziphandler",
"Rev": "56545f4a5d46"
},
{
"ImportPath": "github.com/PuerkitoBio/purell",
"Rev": "v1.1.1"
},
{
"ImportPath": "github.com/PuerkitoBio/urlesc",
"Rev": "de5bf2ad4578"
},
{
"ImportPath": "github.com/asaskevich/govalidator",
"Rev": "f61b66f89f4a"
},
{
"ImportPath": "github.com/census-instrumentation/opencensus-proto",
"Rev": "v0.2.1"
},
{
"ImportPath": "github.com/chzyer/logex",
"Rev": "v1.1.10"
},
{
"ImportPath": "github.com/chzyer/readline",
"Rev": "2972be24d48e"
},
{
"ImportPath": "github.com/chzyer/test",
"Rev": "a1ea475d72b1"
},
{
"ImportPath": "github.com/client9/misspell",
"Rev": "v0.3.4"
},
{
"ImportPath": "github.com/creack/pty",
"Rev": "v1.1.9"
},
{
"ImportPath": "github.com/davecgh/go-spew",
"Rev": "v1.1.1"
},
{
"ImportPath": "github.com/docopt/docopt-go",
"Rev": "ee0de3bc6815"
},
{
"ImportPath": "github.com/elazarl/goproxy",
"Rev": "947c36da3153"
},
{
"ImportPath": "github.com/emicklei/go-restful",
"Rev": "ff4f55a20633"
},
{
"ImportPath": "github.com/envoyproxy/go-control-plane",
"Rev": "5f8ba28d4473"
},
{
"ImportPath": "github.com/envoyproxy/protoc-gen-validate",
"Rev": "v0.1.0"
},
{
"ImportPath": "github.com/evanphx/json-patch",
"Rev": "v4.9.0"
},
{
"ImportPath": "github.com/form3tech-oss/jwt-go",
"Rev": "v3.2.2"
},
{
"ImportPath": "github.com/fsnotify/fsnotify",
"Rev": "v1.4.7"
},
{
"ImportPath": "github.com/go-gl/glfw",
"Rev": "e6da0acd62b1"
},
{
"ImportPath": "github.com/go-gl/glfw/v3.3/glfw",
"Rev": "6f7a984d4dc4"
},
{
"ImportPath": "github.com/go-logr/logr",
"Rev": "v0.4.0"
},
{
"ImportPath": "github.com/go-openapi/jsonpointer",
"Rev": "v0.19.3"
},
{
"ImportPath": "github.com/go-openapi/jsonreference",
"Rev": "v0.19.3"
},
{
"ImportPath": "github.com/go-openapi/spec",
"Rev": "v0.19.3"
},
{
"ImportPath": "github.com/go-openapi/swag",
"Rev": "v0.19.5"
},
{
"ImportPath": "github.com/gogo/protobuf",
"Rev": "v1.3.2"
},
{
"ImportPath": "github.com/golang/glog",
"Rev": "23def4e6c14b"
},
{
"ImportPath": "github.com/golang/groupcache",
"Rev": "8c9f03a8e57e"
},
{
"ImportPath": "github.com/golang/mock",
"Rev": "v1.4.1"
},
{
"ImportPath": "github.com/golang/protobuf",
"Rev": "v1.4.3"
},
{
"ImportPath": "github.com/google/btree",
"Rev": "v1.0.0"
},
{
"ImportPath": "github.com/google/go-cmp",
"Rev": "v0.5.2"
},
{
"ImportPath": "github.com/google/gofuzz",
"Rev": "v1.1.0"
},
{
"ImportPath": "github.com/google/martian",
"Rev": "v2.1.0"
},
{
"ImportPath": "github.com/google/pprof",
"Rev": "1ebb73c60ed3"
},
{
"ImportPath": "github.com/google/renameio",
"Rev": "v0.1.0"
},
{
"ImportPath": "github.com/google/uuid",
"Rev": "v1.1.2"
},
{
"ImportPath": "github.com/googleapis/gax-go/v2",
"Rev": "v2.0.5"
},
{
"ImportPath": "github.com/googleapis/gnostic",
"Rev": "v0.4.1"
},
{
"ImportPath": "github.com/gorilla/websocket",
"Rev": "v1.4.2"
},
{
"ImportPath": "github.com/gregjones/httpcache",
"Rev": "9cad4c3443a7"
},
{
"ImportPath": "github.com/hashicorp/golang-lru",
"Rev": "v0.5.1"
},
{
"ImportPath": "github.com/hpcloud/tail",
"Rev": "v1.0.0"
},
{
"ImportPath": "github.com/ianlancetaylor/demangle",
"Rev": "5e5cf60278f6"
},
{
"ImportPath": "github.com/imdario/mergo",
"Rev": "v0.3.5"
},
{
"ImportPath": "github.com/json-iterator/go",
"Rev": "v1.1.10"
},
{
"ImportPath": "github.com/jstemmer/go-junit-report",
"Rev": "v0.9.1"
},
{
"ImportPath": "github.com/kisielk/errcheck",
"Rev": "v1.5.0"
},
{
"ImportPath": "github.com/kisielk/gotool",
"Rev": "v1.0.0"
},
{
"ImportPath": "github.com/kr/pretty",
"Rev": "v0.2.0"
},
{
"ImportPath": "github.com/kr/pty",
"Rev": "v1.1.5"
},
{
"ImportPath": "github.com/kr/text",
"Rev": "v0.2.0"
},
{
"ImportPath": "github.com/mailru/easyjson",
"Rev": "b2ccc519800e"
},
{
"ImportPath": "github.com/mitchellh/mapstructure",
"Rev": "v1.1.2"
},
{
"ImportPath": "github.com/moby/spdystream",
"Rev": "v0.2.0"
},
{
"ImportPath": "github.com/modern-go/concurrent",
"Rev": "bacd9c7ef1dd"
},
{
"ImportPath": "github.com/modern-go/reflect2",
"Rev": "v1.0.1"
},
{
"ImportPath": "github.com/munnerz/goautoneg",
"Rev": "a547fc61f48d"
},
{
"ImportPath": "github.com/mxk/go-flowrate",
"Rev": "cca7078d478f"
},
{
"ImportPath": "github.com/niemeyer/pretty",
"Rev": "a10e7caefd8e"
},
{
"ImportPath": "github.com/onsi/ginkgo",
"Rev": "v1.11.0"
},
{
"ImportPath": "github.com/onsi/gomega",
"Rev": "v1.7.0"
},
{
"ImportPath": "github.com/peterbourgon/diskv",
"Rev": "v2.0.1"
},
{
"ImportPath": "github.com/pkg/errors",
"Rev": "v0.9.1"
},
{
"ImportPath": "github.com/pmezard/go-difflib",
"Rev": "v1.0.0"
},
{
"ImportPath": "github.com/prometheus/client_model",
"Rev": "14fe0d1b01d4"
},
{
"ImportPath": "github.com/rogpeppe/go-internal",
"Rev": "v1.3.0"
},
{
"ImportPath": "github.com/spf13/afero",
"Rev": "v1.2.2"
},
{
"ImportPath": "github.com/spf13/pflag",
"Rev": "v1.0.5"
},
{
"ImportPath": "github.com/stretchr/objx",
"Rev": "v0.2.0"
},
{
"ImportPath": "github.com/stretchr/testify",
"Rev": "v1.6.1"
},
{
"ImportPath": "github.com/yuin/goldmark",
"Rev": "v1.2.1"
},
{
"ImportPath": "go.opencensus.io",
"Rev": "v0.22.3"
},
{
"ImportPath": "golang.org/x/crypto",
"Rev": "5ea612d1eb83"
},
{
"ImportPath": "golang.org/x/exp",
"Rev": "6cc2880d07d6"
},
{
"ImportPath": "golang.org/x/image",
"Rev": "cff245a6509b"
},
{
"ImportPath": "golang.org/x/lint",
"Rev": "738671d3881b"
},
{
"ImportPath": "golang.org/x/mobile",
"Rev": "d2bd2a29d028"
},
{
"ImportPath": "golang.org/x/mod",
"Rev": "v0.3.0"
},
{
"ImportPath": "golang.org/x/net",
"Rev": "3d97a244fca7"
},
{
"ImportPath": "golang.org/x/oauth2",
"Rev": "bf48bf16ab8d"
},
{
"ImportPath": "golang.org/x/sync",
"Rev": "67f06af15bc9"
},
{
"ImportPath": "golang.org/x/sys",
"Rev": "a50acf3fe073"
},
{
"ImportPath": "golang.org/x/term",
"Rev": "6a3ed077a48d"
},
{
"ImportPath": "golang.org/x/text",
"Rev": "v0.3.4"
},
{
"ImportPath": "golang.org/x/time",
"Rev": "f8bda1e9f3ba"
},
{
"ImportPath": "golang.org/x/tools",
"Rev": "113979e3529a"
},
{
"ImportPath": "golang.org/x/xerrors",
"Rev": "5ec99f83aff1"
},
{
"ImportPath": "google.golang.org/api",
"Rev": "v0.20.0"
},
{
"ImportPath": "google.golang.org/appengine",
"Rev": "v1.6.5"
},
{
"ImportPath": "google.golang.org/genproto",
"Rev": "cb27e3aa2013"
},
{
"ImportPath": "google.golang.org/grpc",
"Rev": "v1.27.1"
},
{
"ImportPath": "google.golang.org/protobuf",
"Rev": "v1.25.0"
},
{
"ImportPath": "gopkg.in/check.v1",
"Rev": "8fa46927fb4f"
},
{
"ImportPath": "gopkg.in/errgo.v2",
"Rev": "v2.1.0"
},
{
"ImportPath": "gopkg.in/fsnotify.v1",
"Rev": "v1.4.7"
},
{
"ImportPath": "gopkg.in/inf.v0",
"Rev": "v0.9.1"
},
{
"ImportPath": "gopkg.in/tomb.v1",
"Rev": "dd632973f1e7"
},
{
"ImportPath": "gopkg.in/yaml.v2",
"Rev": "v2.4.0"
},
{
"ImportPath": "gopkg.in/yaml.v3",
"Rev": "9f266ea9e77c"
},
{
"ImportPath": "honnef.co/go/tools",
"Rev": "v0.0.1-2020.1.3"
},
{
"ImportPath": "k8s.io/api",
"Rev": "ec4ebef5b234"
},
{
"ImportPath": "k8s.io/apimachinery",
"Rev": "ae8b5f5092d3"
},
{
"ImportPath": "k8s.io/gengo",
"Rev": "3a45101e95ac"
},
{
"ImportPath": "k8s.io/klog/v2",
"Rev": "v2.5.0"
},
{
"ImportPath": "k8s.io/kube-openapi",
"Rev": "591a79e4bda7"
},
{
"ImportPath": "k8s.io/utils",
"Rev": "67b214c5f920"
},
{
"ImportPath": "rsc.io/binaryregexp",
"Rev": "v0.2.0"
},
{
"ImportPath": "rsc.io/quote/v3",
"Rev": "v3.1.0"
},
{
"ImportPath": "rsc.io/sampler",
"Rev": "v1.3.0"
},
{
"ImportPath": "sigs.k8s.io/structured-merge-diff/v4",
"Rev": "v4.1.0"
},
{
"ImportPath": "sigs.k8s.io/yaml",
"Rev": "v1.2.0"
}
]
}

4
Godeps/OWNERS generated
View File

@@ -1,4 +0,0 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- dep-approvers

5
Godeps/Readme generated
View File

@@ -1,5 +0,0 @@
This directory tree is generated automatically by godep.
Please do not edit.
See https://github.com/tools/godep for more information.

View File

@@ -35,7 +35,35 @@ import (
)
func NewSimpleDynamicClient(scheme *runtime.Scheme, objects ...runtime.Object) *FakeDynamicClient {
return NewSimpleDynamicClientWithCustomListKinds(scheme, nil, objects...)
unstructuredScheme := runtime.NewScheme()
for gvk := range scheme.AllKnownTypes() {
if unstructuredScheme.Recognizes(gvk) {
continue
}
if strings.HasSuffix(gvk.Kind, "List") {
unstructuredScheme.AddKnownTypeWithName(gvk, &unstructured.UnstructuredList{})
continue
}
unstructuredScheme.AddKnownTypeWithName(gvk, &unstructured.Unstructured{})
}
objects, err := convertObjectsToUnstructured(scheme, objects)
if err != nil {
panic(err)
}
for _, obj := range objects {
gvk := obj.GetObjectKind().GroupVersionKind()
if !unstructuredScheme.Recognizes(gvk) {
unstructuredScheme.AddKnownTypeWithName(gvk, &unstructured.Unstructured{})
}
gvk.Kind += "List"
if !unstructuredScheme.Recognizes(gvk) {
unstructuredScheme.AddKnownTypeWithName(gvk, &unstructured.UnstructuredList{})
}
}
return NewSimpleDynamicClientWithCustomListKinds(unstructuredScheme, nil, objects...)
}
// NewSimpleDynamicClientWithCustomListKinds try not to use this. In general you want to have the scheme have the List types registered
@@ -417,3 +445,41 @@ func (c *dynamicResourceClient) Patch(ctx context.Context, name string, pt types
}
return ret, err
}
func convertObjectsToUnstructured(s *runtime.Scheme, objs []runtime.Object) ([]runtime.Object, error) {
ul := make([]runtime.Object, 0, len(objs))
for _, obj := range objs {
u, err := convertToUnstructured(s, obj)
if err != nil {
return nil, err
}
ul = append(ul, u)
}
return ul, nil
}
func convertToUnstructured(s *runtime.Scheme, obj runtime.Object) (runtime.Object, error) {
var (
err error
u unstructured.Unstructured
)
u.Object, err = runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
if err != nil {
return nil, fmt.Errorf("failed to convert to unstructured: %w", err)
}
gvk := u.GroupVersionKind()
if gvk.Group == "" || gvk.Kind == "" {
gvks, _, err := s.ObjectKinds(obj)
if err != nil {
return nil, fmt.Errorf("failed to convert to unstructured - unable to get GVK %w", err)
}
apiv, k := gvks[0].ToAPIVersionAndKind()
u.SetAPIVersion(apiv)
u.SetKind(k)
}
return &u, nil
}

View File

@@ -21,6 +21,7 @@ import (
"fmt"
"testing"
"github.com/google/go-cmp/cmp"
"k8s.io/apimachinery/pkg/api/equality"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -303,3 +304,166 @@ func TestPatch(t *testing.T) {
t.Run(tc.name, tc.runner)
}
}
// This test ensures list works when the fake dynamic client is seeded with a typed scheme and
// unstructured type fixtures
func TestListWithUnstructuredObjectsAndTypedScheme(t *testing.T) {
gvr := schema.GroupVersionResource{Group: testGroup, Version: testVersion, Resource: testResource}
gvk := gvr.GroupVersion().WithKind(testKind)
listGVK := gvk
listGVK.Kind += "List"
u := unstructured.Unstructured{}
u.SetGroupVersionKind(gvk)
u.SetName("name")
u.SetNamespace("namespace")
typedScheme := runtime.NewScheme()
typedScheme.AddKnownTypeWithName(gvk, &mockResource{})
typedScheme.AddKnownTypeWithName(listGVK, &mockResourceList{})
client := NewSimpleDynamicClient(typedScheme, &u)
list, err := client.Resource(gvr).Namespace("namespace").List(context.Background(), metav1.ListOptions{})
if err != nil {
t.Error("error listing", err)
}
expectedList := &unstructured.UnstructuredList{}
expectedList.SetGroupVersionKind(listGVK)
expectedList.SetResourceVersion("") // by product of the fake setting resource version
expectedList.Items = append(expectedList.Items, u)
if diff := cmp.Diff(expectedList, list); diff != "" {
t.Fatal("unexpected diff (-want, +got): ", diff)
}
}
func TestListWithNoFixturesAndTypedScheme(t *testing.T) {
gvr := schema.GroupVersionResource{Group: testGroup, Version: testVersion, Resource: testResource}
gvk := gvr.GroupVersion().WithKind(testKind)
listGVK := gvk
listGVK.Kind += "List"
typedScheme := runtime.NewScheme()
typedScheme.AddKnownTypeWithName(gvk, &mockResource{})
typedScheme.AddKnownTypeWithName(listGVK, &mockResourceList{})
client := NewSimpleDynamicClient(typedScheme)
list, err := client.Resource(gvr).Namespace("namespace").List(context.Background(), metav1.ListOptions{})
if err != nil {
t.Error("error listing", err)
}
expectedList := &unstructured.UnstructuredList{}
expectedList.SetGroupVersionKind(listGVK)
expectedList.SetResourceVersion("") // by product of the fake setting resource version
if diff := cmp.Diff(expectedList, list); diff != "" {
t.Fatal("unexpected diff (-want, +got): ", diff)
}
}
// This test ensures list works when the dynamic client is seeded with an empty scheme and
// unstructured typed fixtures
func TestListWithNoScheme(t *testing.T) {
gvr := schema.GroupVersionResource{Group: testGroup, Version: testVersion, Resource: testResource}
gvk := gvr.GroupVersion().WithKind(testKind)
listGVK := gvk
listGVK.Kind += "List"
u := unstructured.Unstructured{}
u.SetGroupVersionKind(gvk)
u.SetName("name")
u.SetNamespace("namespace")
emptyScheme := runtime.NewScheme()
client := NewSimpleDynamicClient(emptyScheme, &u)
list, err := client.Resource(gvr).Namespace("namespace").List(context.Background(), metav1.ListOptions{})
if err != nil {
t.Error("error listing", err)
}
expectedList := &unstructured.UnstructuredList{}
expectedList.SetGroupVersionKind(listGVK)
expectedList.SetResourceVersion("") // by product of the fake setting resource version
expectedList.Items = append(expectedList.Items, u)
if diff := cmp.Diff(expectedList, list); diff != "" {
t.Fatal("unexpected diff (-want, +got): ", diff)
}
}
// This test ensures list works when the dynamic client is seeded with an empty scheme and
// unstructured typed fixtures
func TestListWithTypedFixtures(t *testing.T) {
gvr := schema.GroupVersionResource{Group: testGroup, Version: testVersion, Resource: testResource}
gvk := gvr.GroupVersion().WithKind(testKind)
listGVK := gvk
listGVK.Kind += "List"
r := mockResource{}
r.SetGroupVersionKind(gvk)
r.SetName("name")
r.SetNamespace("namespace")
u := unstructured.Unstructured{}
u.SetGroupVersionKind(r.GetObjectKind().GroupVersionKind())
u.SetName(r.GetName())
u.SetNamespace(r.GetNamespace())
// Needed see: https://github.com/kubernetes/kubernetes/issues/67610
unstructured.SetNestedField(u.Object, nil, "metadata", "creationTimestamp")
typedScheme := runtime.NewScheme()
typedScheme.AddKnownTypeWithName(gvk, &mockResource{})
typedScheme.AddKnownTypeWithName(listGVK, &mockResourceList{})
client := NewSimpleDynamicClient(typedScheme, &r)
list, err := client.Resource(gvr).Namespace("namespace").List(context.Background(), metav1.ListOptions{})
if err != nil {
t.Error("error listing", err)
}
expectedList := &unstructured.UnstructuredList{}
expectedList.SetGroupVersionKind(listGVK)
expectedList.SetResourceVersion("") // by product of the fake setting resource version
expectedList.Items = []unstructured.Unstructured{u}
if diff := cmp.Diff(expectedList, list); diff != "" {
t.Fatal("unexpected diff (-want, +got): ", diff)
}
}
type (
mockResource struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata"`
}
mockResourceList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata"`
Items []mockResource
}
)
func (l *mockResourceList) DeepCopyObject() runtime.Object {
o := *l
return &o
}
func (r *mockResource) DeepCopyObject() runtime.Object {
o := *r
return &o
}
var _ runtime.Object = (*mockResource)(nil)
var _ runtime.Object = (*mockResourceList)(nil)

13
go.mod
View File

@@ -13,7 +13,7 @@ require (
github.com/gogo/protobuf v1.3.2
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
github.com/golang/protobuf v1.4.3
github.com/google/go-cmp v0.5.2
github.com/google/go-cmp v0.5.4
github.com/google/gofuzz v1.1.0
github.com/google/uuid v1.1.2
github.com/googleapis/gnostic v0.4.1
@@ -27,16 +27,15 @@ require (
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
k8s.io/api v0.0.0
k8s.io/apimachinery v0.0.0
k8s.io/api v0.21.4
k8s.io/apimachinery v0.21.4
k8s.io/klog/v2 v2.8.0
k8s.io/utils v0.0.0-20201110183641-67b214c5f920
sigs.k8s.io/structured-merge-diff/v4 v4.1.0
sigs.k8s.io/structured-merge-diff/v4 v4.1.2
sigs.k8s.io/yaml v1.2.0
)
replace (
k8s.io/api => ../api
k8s.io/apimachinery => ../apimachinery
k8s.io/client-go => ../client-go
k8s.io/api => k8s.io/api v0.21.4
k8s.io/apimachinery => k8s.io/apimachinery v0.21.4
)

16
go.sum
View File

@@ -108,8 +108,8 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -298,8 +298,8 @@ golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073 h1:8qxJSnu+7dRq6upnbntrmriWByIakBuct5OM/MdQC1M=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs=
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
@@ -431,6 +431,10 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.21.4 h1:WtDkzTAuI31WZKDPeIYpEUA+WeUfXAmA7gwj6nzFfbc=
k8s.io/api v0.21.4/go.mod h1:fTVGP+M4D8+00FN2cMnJqk/eb/GH53bvmNs2SVTmpFk=
k8s.io/apimachinery v0.21.4 h1:KDq0lWZVslHkuE5I7iGAQHwpK0aDTlar1E7IWEc4CNw=
k8s.io/apimachinery v0.21.4/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts=
@@ -443,7 +447,7 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=

View File

@@ -17,9 +17,6 @@ limitations under the License.
package auth
import (
// Initialize all known client auth plugins.
_ "k8s.io/client-go/plugin/pkg/client/auth/azure"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
// Initialize common client auth plugins.
_ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
_ "k8s.io/client-go/plugin/pkg/client/auth/openstack"
)

View File

@@ -0,0 +1,26 @@
// +build !providerless
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package auth
import (
// Initialize client auth plugins for cloud providers.
_ "k8s.io/client-go/plugin/pkg/client/auth/azure"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
_ "k8s.io/client-go/plugin/pkg/client/auth/openstack"
)

View File

@@ -216,13 +216,13 @@ var internalPackages = []string{"client-go/tools/cache/"}
// objects and subsequent deltas.
// Run will exit when stopCh is closed.
func (r *Reflector) Run(stopCh <-chan struct{}) {
klog.V(2).Infof("Starting reflector %s (%s) from %s", r.expectedTypeName, r.resyncPeriod, r.name)
klog.V(3).Infof("Starting reflector %s (%s) from %s", r.expectedTypeName, r.resyncPeriod, r.name)
wait.BackoffUntil(func() {
if err := r.ListAndWatch(stopCh); err != nil {
r.watchErrorHandler(r, err)
}
}, r.backoffManager, true, stopCh)
klog.V(2).Infof("Stopping reflector %s (%s) from %s", r.expectedTypeName, r.resyncPeriod, r.name)
klog.V(3).Infof("Stopping reflector %s (%s) from %s", r.expectedTypeName, r.resyncPeriod, r.name)
}
var (