Compare commits

..

1 Commits

Author SHA1 Message Date
Kubernetes Publisher
6e4752048f Fix Godeps.json to point to kubernetes-1.13.3 tags 2019-02-02 01:12:28 +00:00
12 changed files with 125 additions and 259 deletions

170
Godeps/Godeps.json generated
View File

@@ -56,7 +56,7 @@
},
{
"ImportPath": "github.com/evanphx/json-patch",
"Rev": "5858425f75500d40c52783dce87d085a483ce135"
"Rev": "36442dbdb585210f8d5a1b45e67aa323c197d5c4"
},
{
"ImportPath": "github.com/gogo/protobuf/proto",
@@ -272,339 +272,339 @@
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/apps/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/apps/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/apps/v1beta2",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/auditregistration/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/authentication/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/authentication/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/authorization/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/authorization/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/autoscaling/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta2",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/batch/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/batch/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/batch/v2alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/certificates/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/coordination/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/core/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/events/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/extensions/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/imagepolicy/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/networking/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/policy/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/rbac/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/rbac/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/rbac/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/scheduling/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/settings/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/storage/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/storage/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/api/storage/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "74b699b93c15473932b89e3d1818ba8282f3b5ab"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/fuzzer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/roundtrip",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/naming",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "572dfc7bdfcb4531361a17d27b92851f59acf0dc"
},
{
"ImportPath": "k8s.io/klog",

View File

@@ -164,7 +164,7 @@ func (d *CachedDiscoveryClient) getCachedFile(filename string) ([]byte, error) {
}
func (d *CachedDiscoveryClient) writeCachedFile(filename string, obj runtime.Object) error {
if err := os.MkdirAll(filepath.Dir(filename), 0750); err != nil {
if err := os.MkdirAll(filepath.Dir(filename), 0755); err != nil {
return err
}
@@ -183,7 +183,7 @@ func (d *CachedDiscoveryClient) writeCachedFile(filename string, obj runtime.Obj
return err
}
err = os.Chmod(f.Name(), 0660)
err = os.Chmod(f.Name(), 0755)
if err != nil {
return err
}

View File

@@ -19,7 +19,6 @@ package discovery
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"time"
@@ -96,32 +95,6 @@ func TestNewCachedDiscoveryClient_TTL(t *testing.T) {
assert.Equal(c.groupCalls, 2)
}
func TestNewCachedDiscoveryClient_PathPerm(t *testing.T) {
assert := assert.New(t)
d, err := ioutil.TempDir("", "")
assert.NoError(err)
os.RemoveAll(d)
defer os.RemoveAll(d)
c := fakeDiscoveryClient{}
cdc := newCachedDiscoveryClient(&c, d, 1*time.Nanosecond)
cdc.ServerGroups()
err = filepath.Walk(d, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
assert.Equal(os.FileMode(0750), info.Mode().Perm())
} else {
assert.Equal(os.FileMode(0660), info.Mode().Perm())
}
return nil
})
assert.NoError(err)
}
type fakeDiscoveryClient struct {
groupCalls int
resourceCalls int

View File

@@ -18,7 +18,6 @@ package discovery
import (
"net/http"
"os"
"path/filepath"
"github.com/gregjones/httpcache"
@@ -36,8 +35,6 @@ type cacheRoundTripper struct {
// corresponding requests.
func newCacheRoundTripper(cacheDir string, rt http.RoundTripper) http.RoundTripper {
d := diskv.New(diskv.Options{
PathPerm: os.FileMode(0750),
FilePerm: os.FileMode(0660),
BasePath: cacheDir,
TempDir: filepath.Join(cacheDir, ".diskv-temp"),
})

View File

@@ -22,10 +22,7 @@ import (
"net/http"
"net/url"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
// copied from k8s.io/client-go/transport/round_trippers_test.go
@@ -96,52 +93,3 @@ func TestCacheRoundTripper(t *testing.T) {
t.Errorf("Invalid content read from cache %q", string(content))
}
}
func TestCacheRoundTripperPathPerm(t *testing.T) {
assert := assert.New(t)
rt := &testRoundTripper{}
cacheDir, err := ioutil.TempDir("", "cache-rt")
os.RemoveAll(cacheDir)
defer os.RemoveAll(cacheDir)
if err != nil {
t.Fatal(err)
}
cache := newCacheRoundTripper(cacheDir, rt)
// First call, caches the response
req := &http.Request{
Method: http.MethodGet,
URL: &url.URL{Host: "localhost"},
}
rt.Response = &http.Response{
Header: http.Header{"ETag": []string{`"123456"`}},
Body: ioutil.NopCloser(bytes.NewReader([]byte("Content"))),
StatusCode: http.StatusOK,
}
resp, err := cache.RoundTrip(req)
if err != nil {
t.Fatal(err)
}
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatal(err)
}
if string(content) != "Content" {
t.Errorf(`Expected Body to be "Content", got %q`, string(content))
}
err = filepath.Walk(cacheDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
assert.Equal(os.FileMode(0750), info.Mode().Perm())
} else {
assert.Equal(os.FileMode(0660), info.Mode().Perm())
}
return nil
})
assert.NoError(err)
}

View File

@@ -17,7 +17,6 @@ limitations under the License.
package dynamic
import (
"fmt"
"io"
"k8s.io/apimachinery/pkg/api/meta"
@@ -95,9 +94,6 @@ func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, opts meta
return nil, err
}
name = accessor.GetName()
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
}
result := c.client.client.
@@ -126,10 +122,6 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, opts meta
if err != nil {
return nil, err
}
name := accessor.GetName()
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
if err != nil {
return nil, err
@@ -137,7 +129,7 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, opts meta
result := c.client.client.
Put().
AbsPath(append(c.makeURLSegments(name), subresources...)...).
AbsPath(append(c.makeURLSegments(accessor.GetName()), subresources...)...).
Body(outBytes).
SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Do()
@@ -161,10 +153,6 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opt
if err != nil {
return nil, err
}
name := accessor.GetName()
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
if err != nil {
@@ -173,7 +161,7 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opt
result := c.client.client.
Put().
AbsPath(append(c.makeURLSegments(name), "status")...).
AbsPath(append(c.makeURLSegments(accessor.GetName()), "status")...).
Body(outBytes).
SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Do()
@@ -193,9 +181,6 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opt
}
func (c *dynamicResourceClient) Delete(name string, opts *metav1.DeleteOptions, subresources ...string) error {
if len(name) == 0 {
return fmt.Errorf("name is required")
}
if opts == nil {
opts = &metav1.DeleteOptions{}
}
@@ -231,9 +216,6 @@ func (c *dynamicResourceClient) DeleteCollection(opts *metav1.DeleteOptions, lis
}
func (c *dynamicResourceClient) Get(name string, opts metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) {
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
result := c.client.client.Get().AbsPath(append(c.makeURLSegments(name), subresources...)...).SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).Do()
if err := result.Error(); err != nil {
return nil, err
@@ -302,9 +284,6 @@ func (c *dynamicResourceClient) Watch(opts metav1.ListOptions) (watch.Interface,
}
func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) {
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
result := c.client.client.
Patch(pt).
AbsPath(append(c.makeURLSegments(name), subresources...)...).

View File

@@ -145,7 +145,6 @@ func (r *azureRoundTripper) WrappedRoundTripper() http.RoundTripper { return r.r
type azureToken struct {
token adal.Token
environment string
clientID string
tenantID string
apiserverID string
@@ -220,10 +219,6 @@ func (ts *azureTokenSource) retrieveTokenFromCfg() (*azureToken, error) {
if refreshToken == "" {
return nil, fmt.Errorf("no refresh token in cfg: %s", cfgRefreshToken)
}
environment := ts.cfg[cfgEnvironment]
if environment == "" {
return nil, fmt.Errorf("no environment in cfg: %s", cfgEnvironment)
}
clientID := ts.cfg[cfgClientID]
if clientID == "" {
return nil, fmt.Errorf("no client ID in cfg: %s", cfgClientID)
@@ -255,7 +250,6 @@ func (ts *azureTokenSource) retrieveTokenFromCfg() (*azureToken, error) {
Resource: fmt.Sprintf("spn:%s", apiserverID),
Type: tokenType,
},
environment: environment,
clientID: clientID,
tenantID: tenantID,
apiserverID: apiserverID,
@@ -266,7 +260,6 @@ func (ts *azureTokenSource) storeTokenInCfg(token *azureToken) error {
newCfg := make(map[string]string)
newCfg[cfgAccessToken] = token.token.AccessToken
newCfg[cfgRefreshToken] = token.token.RefreshToken
newCfg[cfgEnvironment] = token.environment
newCfg[cfgClientID] = token.clientID
newCfg[cfgTenantID] = token.tenantID
newCfg[cfgApiserverID] = token.apiserverID
@@ -282,12 +275,7 @@ func (ts *azureTokenSource) storeTokenInCfg(token *azureToken) error {
}
func (ts *azureTokenSource) refreshToken(token *azureToken) (*azureToken, error) {
env, err := azure.EnvironmentFromName(token.environment)
if err != nil {
return nil, err
}
oauthConfig, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, token.tenantID)
oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, token.tenantID)
if err != nil {
return nil, fmt.Errorf("building the OAuth configuration for token refresh: %v", err)
}
@@ -311,7 +299,6 @@ func (ts *azureTokenSource) refreshToken(token *azureToken) (*azureToken, error)
return &azureToken{
token: spt.Token(),
environment: token.environment,
clientID: token.clientID,
tenantID: token.tenantID,
apiserverID: token.apiserverID,
@@ -366,7 +353,6 @@ func (ts *azureTokenSourceDeviceCode) Token() (*azureToken, error) {
return &azureToken{
token: *token,
environment: ts.environment.Name,
clientID: ts.clientID,
tenantID: ts.tenantID,
apiserverID: ts.apiserverID,

View File

@@ -53,13 +53,6 @@ func TestAzureTokenSource(t *testing.T) {
wantCfg := token2Cfg(token)
persistedCfg := persiter.Cache()
wantCfgLen := len(wantCfg)
persistedCfgLen := len(persistedCfg)
if wantCfgLen != persistedCfgLen {
t.Errorf("wantCfgLen and persistedCfgLen do not match, wantCfgLen=%v, persistedCfgLen=%v", wantCfgLen, persistedCfgLen)
}
for k, v := range persistedCfg {
if strings.Compare(v, wantCfg[k]) != 0 {
t.Errorf("Token() persisted cfg %s: got %v, want %v", k, v, wantCfg[k])
@@ -110,7 +103,6 @@ type fakeTokenSource struct {
func (ts *fakeTokenSource) Token() (*azureToken, error) {
return &azureToken{
token: newFackeAzureToken(ts.accessToken, ts.expiresOn),
environment: "testenv",
clientID: "fake",
tenantID: "fake",
apiserverID: "fake",
@@ -121,7 +113,6 @@ func token2Cfg(token *azureToken) map[string]string {
cfg := make(map[string]string)
cfg[cfgAccessToken] = token.token.AccessToken
cfg[cfgRefreshToken] = token.token.RefreshToken
cfg[cfgEnvironment] = token.environment
cfg[cfgClientID] = token.clientID
cfg[cfgTenantID] = token.tenantID
cfg[cfgApiserverID] = token.apiserverID

View File

@@ -74,10 +74,9 @@ func (c *Config) TransportConfig() (*transport.Config, error) {
KeyFile: c.KeyFile,
KeyData: c.KeyData,
},
Username: c.Username,
Password: c.Password,
BearerToken: c.BearerToken,
BearerTokenFile: c.BearerTokenFile,
Username: c.Username,
Password: c.Password,
BearerToken: c.BearerToken,
Impersonate: transport.ImpersonationConfig{
UserName: c.Impersonate.UserName,
Groups: c.Impersonate.Groups,

View File

@@ -24,8 +24,10 @@ import (
"net"
"net/url"
"reflect"
"strconv"
"strings"
"sync"
"sync/atomic"
"syscall"
"time"
@@ -93,10 +95,17 @@ func NewReflector(lw ListerWatcher, expectedType interface{}, store Store, resyn
return NewNamedReflector(naming.GetNameFromCallsite(internalPackages...), lw, expectedType, store, resyncPeriod)
}
// reflectorDisambiguator is used to disambiguate started reflectors.
// initialized to an unstable value to ensure meaning isn't attributed to the suffix.
var reflectorDisambiguator = int64(time.Now().UnixNano() % 12345)
// NewNamedReflector same as NewReflector, but with a specified name for logging
func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, store Store, resyncPeriod time.Duration) *Reflector {
reflectorSuffix := atomic.AddInt64(&reflectorDisambiguator, 1)
r := &Reflector{
name: name,
name: name,
// we need this to be unique per process (some names are still the same) but obvious who it belongs to
metrics: newReflectorMetrics(makeValidPrometheusMetricLabel(fmt.Sprintf("reflector_"+name+"_%d", reflectorSuffix))),
listerWatcher: lw,
store: store,
expectedType: reflect.TypeOf(expectedType),
@@ -164,10 +173,13 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
// to be served from cache and potentially be delayed relative to
// etcd contents. Reflector framework will catch up via Watch() eventually.
options := metav1.ListOptions{ResourceVersion: "0"}
r.metrics.numberOfLists.Inc()
start := r.clock.Now()
list, err := r.listerWatcher.List(options)
if err != nil {
return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err)
}
r.metrics.listDuration.Observe(time.Since(start).Seconds())
listMetaInterface, err := meta.ListAccessor(list)
if err != nil {
return fmt.Errorf("%s: Unable to understand list result %#v: %v", r.name, list, err)
@@ -177,6 +189,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
if err != nil {
return fmt.Errorf("%s: Unable to understand list result %#v (%v)", r.name, list, err)
}
r.metrics.numberOfItemsInList.Observe(float64(len(items)))
if err := r.syncWith(items, resourceVersion); err != nil {
return fmt.Errorf("%s: Unable to sync list result: %v", r.name, err)
}
@@ -226,6 +239,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
TimeoutSeconds: &timeoutSeconds,
}
r.metrics.numberOfWatches.Inc()
w, err := r.listerWatcher.Watch(options)
if err != nil {
switch err {
@@ -277,6 +291,11 @@ func (r *Reflector) watchHandler(w watch.Interface, resourceVersion *string, err
// Stopping the watcher should be idempotent and if we return from this function there's no way
// we're coming back in with the same watch interface.
defer w.Stop()
// update metrics
defer func() {
r.metrics.numberOfItemsInWatch.Observe(float64(eventCount))
r.metrics.watchDuration.Observe(time.Since(start).Seconds())
}()
loop:
for {
@@ -332,6 +351,7 @@ loop:
watchDuration := r.clock.Now().Sub(start)
if watchDuration < 1*time.Second && eventCount == 0 {
r.metrics.numberOfShortWatches.Inc()
return fmt.Errorf("very short watch: %s: Unexpected watch close - watch lasted less than a second and no items received", r.name)
}
klog.V(4).Infof("%s: Watch close - %v total %v items received", r.name, r.expectedType, eventCount)
@@ -350,4 +370,9 @@ func (r *Reflector) setLastSyncResourceVersion(v string) {
r.lastSyncResourceVersionMutex.Lock()
defer r.lastSyncResourceVersionMutex.Unlock()
r.lastSyncResourceVersion = v
rv, err := strconv.Atoi(v)
if err == nil {
r.metrics.lastResourceVersion.Set(float64(rv))
}
}

View File

@@ -228,7 +228,6 @@ func (config *DirectClientConfig) getUserIdentificationPartialConfig(configAuthI
// blindly overwrite existing values based on precedence
if len(configAuthInfo.Token) > 0 {
mergedConfig.BearerToken = configAuthInfo.Token
mergedConfig.BearerTokenFile = configAuthInfo.TokenFile
} else if len(configAuthInfo.TokenFile) > 0 {
tokenBytes, err := ioutil.ReadFile(configAuthInfo.TokenFile)
if err != nil {
@@ -500,9 +499,8 @@ func (config *inClusterClientConfig) ClientConfig() (*restclient.Config, error)
if server := config.overrides.ClusterInfo.Server; len(server) > 0 {
icc.Host = server
}
if len(config.overrides.AuthInfo.Token) > 0 || len(config.overrides.AuthInfo.TokenFile) > 0 {
icc.BearerToken = config.overrides.AuthInfo.Token
icc.BearerTokenFile = config.overrides.AuthInfo.TokenFile
if token := config.overrides.AuthInfo.Token; len(token) > 0 {
icc.BearerToken = token
}
if certificateAuthorityFile := config.overrides.ClusterInfo.CertificateAuthority; len(certificateAuthorityFile) > 0 {
icc.TLSClientConfig.CAFile = certificateAuthorityFile

View File

@@ -548,30 +548,6 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
},
},
},
{
overrides: &ConfigOverrides{
ClusterInfo: clientcmdapi.Cluster{
Server: "https://host-from-overrides.com",
CertificateAuthority: "/path/to/ca-from-overrides.crt",
},
AuthInfo: clientcmdapi.AuthInfo{
Token: "token-from-override",
TokenFile: "tokenfile-from-override",
},
},
},
{
overrides: &ConfigOverrides{
ClusterInfo: clientcmdapi.Cluster{
Server: "https://host-from-overrides.com",
CertificateAuthority: "/path/to/ca-from-overrides.crt",
},
AuthInfo: clientcmdapi.AuthInfo{
Token: "",
TokenFile: "tokenfile-from-override",
},
},
},
{
overrides: &ConfigOverrides{},
},
@@ -580,15 +556,13 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
for _, tc := range tt {
expectedServer := "https://host-from-cluster.com"
expectedToken := "token-from-cluster"
expectedTokenFile := "tokenfile-from-cluster"
expectedCAFile := "/path/to/ca-from-cluster.crt"
icc := &inClusterClientConfig{
inClusterConfigProvider: func() (*restclient.Config, error) {
return &restclient.Config{
Host: expectedServer,
BearerToken: expectedToken,
BearerTokenFile: expectedTokenFile,
Host: expectedServer,
BearerToken: expectedToken,
TLSClientConfig: restclient.TLSClientConfig{
CAFile: expectedCAFile,
},
@@ -605,9 +579,8 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
if overridenServer := tc.overrides.ClusterInfo.Server; len(overridenServer) > 0 {
expectedServer = overridenServer
}
if len(tc.overrides.AuthInfo.Token) > 0 || len(tc.overrides.AuthInfo.TokenFile) > 0 {
expectedToken = tc.overrides.AuthInfo.Token
expectedTokenFile = tc.overrides.AuthInfo.TokenFile
if overridenToken := tc.overrides.AuthInfo.Token; len(overridenToken) > 0 {
expectedToken = overridenToken
}
if overridenCAFile := tc.overrides.ClusterInfo.CertificateAuthority; len(overridenCAFile) > 0 {
expectedCAFile = overridenCAFile
@@ -619,9 +592,6 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
if clientConfig.BearerToken != expectedToken {
t.Errorf("Expected token %v, got %v", expectedToken, clientConfig.BearerToken)
}
if clientConfig.BearerTokenFile != expectedTokenFile {
t.Errorf("Expected tokenfile %v, got %v", expectedTokenFile, clientConfig.BearerTokenFile)
}
if clientConfig.TLSClientConfig.CAFile != expectedCAFile {
t.Errorf("Expected Certificate Authority %v, got %v", expectedCAFile, clientConfig.TLSClientConfig.CAFile)
}