diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index addab09e..95edc633 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,618 +1,618 @@ { - "ImportPath": "k8s.io/client-go", - "GoVersion": "go1.9", - "GodepVersion": "v79", - "Packages": [ - "./..." - ], - "Deps": [ - { - "ImportPath": "cloud.google.com/go/compute/metadata", - "Rev": "3b1ae45394a234c385be014e9a488f2bb6eef821" - }, - { - "ImportPath": "cloud.google.com/go/internal", - "Rev": "3b1ae45394a234c385be014e9a488f2bb6eef821" - }, - { - "ImportPath": "github.com/Azure/go-autorest/autorest", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" - }, - { - "ImportPath": "github.com/Azure/go-autorest/autorest/adal", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" - }, - { - "ImportPath": "github.com/Azure/go-autorest/autorest/azure", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" - }, - { - "ImportPath": "github.com/Azure/go-autorest/autorest/date", - "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" - }, - { - "ImportPath": "github.com/coreos/go-oidc/http", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/jose", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/key", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/oauth2", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/go-oidc/oidc", - "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" - }, - { - "ImportPath": "github.com/coreos/pkg/health", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" - }, - { - "ImportPath": "github.com/coreos/pkg/httputil", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" - }, - { - "ImportPath": "github.com/coreos/pkg/timeutil", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" - }, - { - "ImportPath": "github.com/davecgh/go-spew/spew", - "Rev": "782f4967f2dc4564575ca782fe2d04090b5faca8" - }, - { - "ImportPath": "github.com/dgrijalva/jwt-go", - "Rev": "01aeca54ebda6e0fbfafd0a524d234159c05ec20" - }, - { - "ImportPath": "github.com/docker/spdystream", - "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" - }, - { - "ImportPath": "github.com/docker/spdystream/spdy", - "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" - }, - { - "ImportPath": "github.com/ghodss/yaml", - "Rev": "73d445a93680fa1a78ae23a5839bad48f32ba1ee" - }, - { - "ImportPath": "github.com/gogo/protobuf/proto", - "Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7" - }, - { - "ImportPath": "github.com/gogo/protobuf/sortkeys", - "Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7" - }, - { - "ImportPath": "github.com/golang/glog", - "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" - }, - { - "ImportPath": "github.com/golang/groupcache/lru", - "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" - }, - { - "ImportPath": "github.com/golang/protobuf/proto", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/golang/protobuf/ptypes", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/golang/protobuf/ptypes/any", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/golang/protobuf/ptypes/duration", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/golang/protobuf/ptypes/timestamp", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/google/gofuzz", - "Rev": "44d81051d367757e1c7c6a5a86423ece9afcf63c" - }, - { - "ImportPath": "github.com/googleapis/gnostic/OpenAPIv2", - "Rev": "0c5108395e2debce0d731cf0287ddf7242066aba" - }, - { - "ImportPath": "github.com/googleapis/gnostic/compiler", - "Rev": "0c5108395e2debce0d731cf0287ddf7242066aba" - }, - { - "ImportPath": "github.com/googleapis/gnostic/extensions", - "Rev": "0c5108395e2debce0d731cf0287ddf7242066aba" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/utils", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/pagination", - "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" - }, - { - "ImportPath": "github.com/hashicorp/golang-lru", - "Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4" - }, - { - "ImportPath": "github.com/hashicorp/golang-lru/simplelru", - "Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4" - }, - { - "ImportPath": "github.com/howeyc/gopass", - "Rev": "bf9dde6d0d2c004a008c27aaee91170c786f6db8" - }, - { - "ImportPath": "github.com/imdario/mergo", - "Rev": "6633656539c1639d9d78127b7d47c622b5d7b6dc" - }, - { - "ImportPath": "github.com/jonboulle/clockwork", - "Rev": "72f9bd7c4e0c2a40055ab3d0f09654f730cce982" - }, - { - "ImportPath": "github.com/json-iterator/go", - "Rev": "13f86432b882000a51c6e610c620974462691a97" - }, - { - "ImportPath": "github.com/juju/ratelimit", - "Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342" - }, - { - "ImportPath": "github.com/pmezard/go-difflib/difflib", - "Rev": "d8ed2627bdf02c080bf22230dbb337003b7aba2d" - }, - { - "ImportPath": "github.com/spf13/pflag", - "Rev": "9ff6c6923cfffbcd502984b8e0c80539a94968b7" - }, - { - "ImportPath": "github.com/stretchr/testify/assert", - "Rev": "f6abca593680b2315d2075e0f5e2a9751e3f431a" - }, - { - "ImportPath": "golang.org/x/crypto/ssh/terminal", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/net/context", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/context/ctxhttp", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/http2", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/http2/hpack", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/idna", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/lex/httplex", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/oauth2", - "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" - }, - { - "ImportPath": "golang.org/x/oauth2/google", - "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" - }, - { - "ImportPath": "golang.org/x/oauth2/internal", - "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" - }, - { - "ImportPath": "golang.org/x/oauth2/jws", - "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" - }, - { - "ImportPath": "golang.org/x/oauth2/jwt", - "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" - }, - { - "ImportPath": "golang.org/x/sys/unix", - "Rev": "95c6576299259db960f6c5b9b69ea52422860fce" - }, - { - "ImportPath": "golang.org/x/sys/windows", - "Rev": "95c6576299259db960f6c5b9b69ea52422860fce" - }, - { - "ImportPath": "golang.org/x/text/secure/bidirule", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/transform", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/unicode/bidi", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/unicode/norm", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "gopkg.in/inf.v0", - "Rev": "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4" - }, - { - "ImportPath": "gopkg.in/yaml.v2", - "Rev": "53feefa2559fb8dfa8d81baad31be332c97d6c77" - }, - { - "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/apps/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/batch/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/core/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/imagepolicy/v1alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/networking/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/storage/v1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" - }, - { - "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", - "Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3" - } - ] + "ImportPath": "k8s.io/client-go", + "GoVersion": "go1.9", + "GodepVersion": "v79", + "Packages": [ + "./..." + ], + "Deps": [ + { + "ImportPath": "cloud.google.com/go/compute/metadata", + "Rev": "3b1ae45394a234c385be014e9a488f2bb6eef821" + }, + { + "ImportPath": "cloud.google.com/go/internal", + "Rev": "3b1ae45394a234c385be014e9a488f2bb6eef821" + }, + { + "ImportPath": "github.com/Azure/go-autorest/autorest", + "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + }, + { + "ImportPath": "github.com/Azure/go-autorest/autorest/adal", + "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + }, + { + "ImportPath": "github.com/Azure/go-autorest/autorest/azure", + "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + }, + { + "ImportPath": "github.com/Azure/go-autorest/autorest/date", + "Rev": "e14a70c556c8e0db173358d1a903dca345a8e75e" + }, + { + "ImportPath": "github.com/coreos/go-oidc/http", + "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" + }, + { + "ImportPath": "github.com/coreos/go-oidc/jose", + "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" + }, + { + "ImportPath": "github.com/coreos/go-oidc/key", + "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" + }, + { + "ImportPath": "github.com/coreos/go-oidc/oauth2", + "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" + }, + { + "ImportPath": "github.com/coreos/go-oidc/oidc", + "Rev": "a4973d9a4225417aecf5d450a9522f00c1f7130f" + }, + { + "ImportPath": "github.com/coreos/pkg/health", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" + }, + { + "ImportPath": "github.com/coreos/pkg/httputil", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" + }, + { + "ImportPath": "github.com/coreos/pkg/timeutil", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" + }, + { + "ImportPath": "github.com/davecgh/go-spew/spew", + "Rev": "782f4967f2dc4564575ca782fe2d04090b5faca8" + }, + { + "ImportPath": "github.com/dgrijalva/jwt-go", + "Rev": "01aeca54ebda6e0fbfafd0a524d234159c05ec20" + }, + { + "ImportPath": "github.com/docker/spdystream", + "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" + }, + { + "ImportPath": "github.com/docker/spdystream/spdy", + "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" + }, + { + "ImportPath": "github.com/ghodss/yaml", + "Rev": "73d445a93680fa1a78ae23a5839bad48f32ba1ee" + }, + { + "ImportPath": "github.com/gogo/protobuf/proto", + "Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7" + }, + { + "ImportPath": "github.com/gogo/protobuf/sortkeys", + "Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7" + }, + { + "ImportPath": "github.com/golang/glog", + "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" + }, + { + "ImportPath": "github.com/golang/groupcache/lru", + "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" + }, + { + "ImportPath": "github.com/golang/protobuf/proto", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/golang/protobuf/ptypes", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/golang/protobuf/ptypes/any", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/golang/protobuf/ptypes/duration", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/golang/protobuf/ptypes/timestamp", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/google/gofuzz", + "Rev": "44d81051d367757e1c7c6a5a86423ece9afcf63c" + }, + { + "ImportPath": "github.com/googleapis/gnostic/OpenAPIv2", + "Rev": "0c5108395e2debce0d731cf0287ddf7242066aba" + }, + { + "ImportPath": "github.com/googleapis/gnostic/compiler", + "Rev": "0c5108395e2debce0d731cf0287ddf7242066aba" + }, + { + "ImportPath": "github.com/googleapis/gnostic/extensions", + "Rev": "0c5108395e2debce0d731cf0287ddf7242066aba" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/utils", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/pagination", + "Rev": "8e59687aa4b27ab22a0bf3295f1e165ff7bd5f97" + }, + { + "ImportPath": "github.com/hashicorp/golang-lru", + "Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4" + }, + { + "ImportPath": "github.com/hashicorp/golang-lru/simplelru", + "Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4" + }, + { + "ImportPath": "github.com/howeyc/gopass", + "Rev": "bf9dde6d0d2c004a008c27aaee91170c786f6db8" + }, + { + "ImportPath": "github.com/imdario/mergo", + "Rev": "6633656539c1639d9d78127b7d47c622b5d7b6dc" + }, + { + "ImportPath": "github.com/jonboulle/clockwork", + "Rev": "72f9bd7c4e0c2a40055ab3d0f09654f730cce982" + }, + { + "ImportPath": "github.com/json-iterator/go", + "Rev": "13f86432b882000a51c6e610c620974462691a97" + }, + { + "ImportPath": "github.com/juju/ratelimit", + "Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342" + }, + { + "ImportPath": "github.com/pmezard/go-difflib/difflib", + "Rev": "d8ed2627bdf02c080bf22230dbb337003b7aba2d" + }, + { + "ImportPath": "github.com/spf13/pflag", + "Rev": "9ff6c6923cfffbcd502984b8e0c80539a94968b7" + }, + { + "ImportPath": "github.com/stretchr/testify/assert", + "Rev": "f6abca593680b2315d2075e0f5e2a9751e3f431a" + }, + { + "ImportPath": "golang.org/x/crypto/ssh/terminal", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/net/context", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/context/ctxhttp", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/http2", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/http2/hpack", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/idna", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/lex/httplex", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/oauth2", + "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" + }, + { + "ImportPath": "golang.org/x/oauth2/google", + "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" + }, + { + "ImportPath": "golang.org/x/oauth2/internal", + "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" + }, + { + "ImportPath": "golang.org/x/oauth2/jws", + "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" + }, + { + "ImportPath": "golang.org/x/oauth2/jwt", + "Rev": "a6bd8cefa1811bd24b86f8902872e4e8225f74c4" + }, + { + "ImportPath": "golang.org/x/sys/unix", + "Rev": "95c6576299259db960f6c5b9b69ea52422860fce" + }, + { + "ImportPath": "golang.org/x/sys/windows", + "Rev": "95c6576299259db960f6c5b9b69ea52422860fce" + }, + { + "ImportPath": "golang.org/x/text/secure/bidirule", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/transform", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/unicode/bidi", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/unicode/norm", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "gopkg.in/inf.v0", + "Rev": "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4" + }, + { + "ImportPath": "gopkg.in/yaml.v2", + "Rev": "53feefa2559fb8dfa8d81baad31be332c97d6c77" + }, + { + "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/admissionregistration/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/apps/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/apps/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/apps/v1beta2", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/authentication/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/authentication/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/authorization/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/authorization/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/autoscaling/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/autoscaling/v2beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/batch/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/batch/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/batch/v2alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/certificates/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/core/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/events/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/extensions/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/imagepolicy/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/networking/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/policy/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/rbac/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/rbac/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/rbac/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/scheduling/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/settings/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/storage/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/storage/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/api/storage/v1beta1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/equality", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/errors", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/meta", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/resource", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/fields", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/labels", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/selection", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/types", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/cache", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/clock", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/diff", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/errors", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/framer", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/json", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/net", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/sets", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/validation", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/wait", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/version", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/watch", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", + "Rev": "bc918d4f73e11cb3110730ec8e8ee02c58d6267c" + }, + { + "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", + "Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3" + } + ] } diff --git a/tools/bootstrap/token/api/BUILD b/tools/bootstrap/token/api/BUILD new file mode 100644 index 00000000..7416adc0 --- /dev/null +++ b/tools/bootstrap/token/api/BUILD @@ -0,0 +1,26 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "types.go", + ], + importpath = "k8s.io/client-go/tools/bootstrap/token/api", + visibility = ["//visibility:public"], + deps = ["//vendor/k8s.io/api/core/v1:go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/tools/bootstrap/token/api/OWNERS b/tools/bootstrap/token/api/OWNERS new file mode 100644 index 00000000..8a2f5b59 --- /dev/null +++ b/tools/bootstrap/token/api/OWNERS @@ -0,0 +1,5 @@ +approvers: +- jbeda +- luxas +reviewers: +- mattmoyer diff --git a/tools/bootstrap/token/api/doc.go b/tools/bootstrap/token/api/doc.go new file mode 100644 index 00000000..72738711 --- /dev/null +++ b/tools/bootstrap/token/api/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2017 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 api (pkg/bootstrap/api) contains constants and types needed for +// bootstrap tokens as maintained by the BootstrapSigner and TokenCleaner +// controllers (in pkg/controller/bootstrap) +package api // import "k8s.io/client-go/tools/bootstrap/api" diff --git a/tools/bootstrap/token/api/types.go b/tools/bootstrap/token/api/types.go new file mode 100644 index 00000000..c30814c0 --- /dev/null +++ b/tools/bootstrap/token/api/types.go @@ -0,0 +1,100 @@ +/* +Copyright 2017 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 api + +import ( + "k8s.io/api/core/v1" +) + +const ( + // BootstrapTokenSecretPrefix is the prefix for bootstrap token names. + // Bootstrap tokens secrets must be named in the form + // `bootstrap-token-`. This is the prefix to be used before the + // token ID. + BootstrapTokenSecretPrefix = "bootstrap-token-" + + // SecretTypeBootstrapToken is used during the automated bootstrap process (first + // implemented by kubeadm). It stores tokens that are used to sign well known + // ConfigMaps. They may also eventually be used for authentication. + SecretTypeBootstrapToken v1.SecretType = "bootstrap.kubernetes.io/token" + + // BootstrapTokenIDKey is the id of this token. This can be transmitted in the + // clear and encoded in the name of the secret. It must be a random 6 character + // string that matches the regexp `^([a-z0-9]{6})$`. Required. + BootstrapTokenIDKey = "token-id" + + // BootstrapTokenSecretKey is the actual secret. It must be a random 16 character + // string that matches the regexp `^([a-z0-9]{16})$`. Required. + BootstrapTokenSecretKey = "token-secret" + + // BootstrapTokenExpirationKey is when this token should be expired and no + // longer used. A controller will delete this resource after this time. This + // is an absolute UTC time using RFC3339. If this cannot be parsed, the token + // should be considered invalid. Optional. + BootstrapTokenExpirationKey = "expiration" + + // BootstrapTokenDescriptionKey is a description in human-readable format that + // describes what the bootstrap token is used for. Optional. + BootstrapTokenDescriptionKey = "description" + + // BootstrapTokenExtraGroupsKey is a comma-separated list of group names. + // The bootstrap token will authenticate as these groups in addition to the + // "system:bootstrappers" group. + BootstrapTokenExtraGroupsKey = "auth-extra-groups" + + // BootstrapTokenUsagePrefix is the prefix for the other usage constants that specifies different + // functions of a bootstrap token + BootstrapTokenUsagePrefix = "usage-bootstrap-" + + // BootstrapTokenUsageSigningKey signals that this token should be used to + // sign configs as part of the bootstrap process. Value must be "true". Any + // other value is assumed to be false. Optional. + BootstrapTokenUsageSigningKey = "usage-bootstrap-signing" + + // BootstrapTokenUsageAuthentication signals that this token should be used + // as a bearer token to authenticate against the Kubernetes API. The bearer + // token takes the form "." and authenticates as the + // user "system:bootstrap:" in the "system:bootstrappers" group + // as well as any groups specified using BootstrapTokenExtraGroupsKey. + // Value must be "true". Any other value is assumed to be false. Optional. + BootstrapTokenUsageAuthentication = "usage-bootstrap-authentication" + + // ConfigMapClusterInfo defines the name for the ConfigMap where the information how to connect and trust the cluster exist + ConfigMapClusterInfo = "cluster-info" + + // KubeConfigKey defines at which key in the Data object of the ConfigMap the KubeConfig object is stored + KubeConfigKey = "kubeconfig" + + // JWSSignatureKeyPrefix defines what key prefix the JWS-signed tokens have + JWSSignatureKeyPrefix = "jws-kubeconfig-" + + // BootstrapUserPrefix is the username prefix bootstrapping bearer tokens + // authenticate as. The full username given is "system:bootstrap:". + BootstrapUserPrefix = "system:bootstrap:" + + // BootstrapGroupPattern is the valid regex pattern that all groups + // assigned to a bootstrap token by BootstrapTokenExtraGroupsKey must match. + // See also ValidateBootstrapGroupName(). + BootstrapGroupPattern = "system:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]" + + // BootstrapDefaultGroup is the default group for bootstrapping bearer + // tokens (in addition to any groups from BootstrapTokenExtraGroupsKey). + BootstrapDefaultGroup = "system:bootstrappers" +) + +// KnownTokenUsages specifies the known functions a token will get. +var KnownTokenUsages = []string{"signing", "authentication"} diff --git a/tools/bootstrap/token/util/BUILD b/tools/bootstrap/token/util/BUILD new file mode 100644 index 00000000..9c015fb5 --- /dev/null +++ b/tools/bootstrap/token/util/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["helpers.go"], + importpath = "k8s.io/client-go/tools/bootstrap/token/util", + visibility = ["//visibility:public"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//vendor/k8s.io/client-go/tools/bootstrap/token/api:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["helpers_test.go"], + embed = [":go_default_library"], + importpath = "k8s.io/client-go/tools/bootstrap/token/util", +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/tools/bootstrap/token/util/helpers.go b/tools/bootstrap/token/util/helpers.go new file mode 100644 index 00000000..d28fd28f --- /dev/null +++ b/tools/bootstrap/token/util/helpers.go @@ -0,0 +1,52 @@ +/* +Copyright 2017 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 util + +import ( + "fmt" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/bootstrap/token/api" + "regexp" + "strings" +) + +var bootstrapGroupRegexp = regexp.MustCompile(`\A` + api.BootstrapGroupPattern + `\z`) + +// ValidateBootstrapGroupName checks if the provided group name is a valid +// bootstrap group name. Returns nil if valid or a validation error if invalid. +// TODO(mattmoyer): this validation should migrate out to client-go (see https://github.com/kubernetes/client-go/issues/114) +func ValidateBootstrapGroupName(name string) error { + if bootstrapGroupRegexp.Match([]byte(name)) { + return nil + } + return fmt.Errorf("bootstrap group %q is invalid (must match %s)", name, api.BootstrapGroupPattern) +} + +// ValidateUsages validates that the passed in string are valid usage strings for bootstrap tokens. +func ValidateUsages(usages []string) error { + validUsages := sets.NewString(api.KnownTokenUsages...) + invalidUsages := sets.NewString() + for _, usage := range usages { + if !validUsages.Has(usage) { + invalidUsages.Insert(usage) + } + } + if len(invalidUsages) > 0 { + return fmt.Errorf("invalide bootstrap token usage string: %s, valid usage options: %s", strings.Join(invalidUsages.List(), ","), strings.Join(api.KnownTokenUsages, ",")) + } + return nil +} diff --git a/tools/bootstrap/token/util/helpers_test.go b/tools/bootstrap/token/util/helpers_test.go new file mode 100644 index 00000000..915bf754 --- /dev/null +++ b/tools/bootstrap/token/util/helpers_test.go @@ -0,0 +1,76 @@ +/* +Copyright 2017 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 util + +import ( + "strings" + "testing" +) + +func TestValidateBootstrapGroupName(t *testing.T) { + tests := []struct { + name string + input string + valid bool + }{ + {"valid", "system:bootstrappers:foo", true}, + {"valid nested", "system:bootstrappers:foo:bar:baz", true}, + {"valid with dashes and number", "system:bootstrappers:foo-bar-42", true}, + {"invalid uppercase", "system:bootstrappers:Foo", false}, + {"missing prefix", "foo", false}, + {"prefix with no body", "system:bootstrappers:", false}, + {"invalid spaces", "system:bootstrappers: ", false}, + {"invalid asterisk", "system:bootstrappers:*", false}, + {"trailing colon", "system:bootstrappers:foo:", false}, + {"trailing dash", "system:bootstrappers:foo-", false}, + {"script tags", "system:bootstrappers:", false}, + {"too long", "system:bootstrappers:" + strings.Repeat("x", 300), false}, + } + for _, test := range tests { + err := ValidateBootstrapGroupName(test.input) + if err != nil && test.valid { + t.Errorf("test %q: ValidateBootstrapGroupName(%q) returned unexpected error: %v", test.name, test.input, err) + } + if err == nil && !test.valid { + t.Errorf("test %q: ValidateBootstrapGroupName(%q) was supposed to return an error but didn't", test.name, test.input) + } + } +} + +func TestValidateUsages(t *testing.T) { + tests := []struct { + name string + input []string + valid bool + }{ + {"valid of signing", []string{"signing"}, true}, + {"valid of authentication", []string{"authentication"}, true}, + {"all valid", []string{"authentication", "signing"}, true}, + {"single invalid", []string{"authentication", "foo"}, false}, + {"all invalid", []string{"foo", "bar"}, false}, + } + + for _, test := range tests { + err := ValidateUsages(test.input) + if err != nil && test.valid { + t.Errorf("test %q: ValidateUsages(%v) returned unexpected error: %v", test.name, test.input, err) + } + if err == nil && !test.valid { + t.Errorf("test %q: ValidateUsages(%v) was supposed to return an error but didn't", test.name, test.input) + } + } +}