diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 07ce6463..992fc504 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": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "d40b72863885248607ceac2631cd78de166f51c3" - }, - { - "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": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/errors", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/meta", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/resource", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/fields", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/labels", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/selection", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/types", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/cache", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/clock", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/diff", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/errors", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/framer", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/json", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/net", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/sets", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/validation", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/wait", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/version", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/watch", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", + "Rev": "17e8c4ddcf485c837950b38d9509bfcadfd0c8e1" + }, + { + "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", + "Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3" + } + ] } diff --git a/kubernetes/fake/clientset_generated.go b/kubernetes/fake/clientset_generated.go index 762d1405..02b950b2 100644 --- a/kubernetes/fake/clientset_generated.go +++ b/kubernetes/fake/clientset_generated.go @@ -95,7 +95,15 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { fakePtr := testing.Fake{} fakePtr.AddReactor("*", "*", testing.ObjectReaction(o)) - fakePtr.AddWatchReactor("*", testing.DefaultWatchReactor(watch.NewFake(), nil)) + fakePtr.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + gvr := action.GetResource() + ns := action.GetNamespace() + watch, err := o.Watch(gvr, ns) + if err != nil { + return false, nil, err + } + return true, watch, nil + }) return &Clientset{fakePtr, &fakediscovery.FakeDiscovery{Fake: &fakePtr}} } diff --git a/testing/BUILD b/testing/BUILD index b26e6628..666a449b 100644 --- a/testing/BUILD +++ b/testing/BUILD @@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"]) load( "@io_bazel_rules_go//go:def.bzl", "go_library", + "go_test", ) go_library( @@ -28,6 +29,24 @@ go_library( ], ) +go_test( + name = "go_default_test", + srcs = [ + "fixture_test.go", + ], + embed = [":go_default_library"], + importpath = "k8s.io/client-go/testing", + deps = [ + "//vendor/github.com/stretchr/testify/assert:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", + ], +) + filegroup( name = "package-srcs", srcs = glob(["**"]), diff --git a/testing/fixture.go b/testing/fixture.go index 08379fb0..ba8ee508 100644 --- a/testing/fixture.go +++ b/testing/fixture.go @@ -29,6 +29,11 @@ import ( restclient "k8s.io/client-go/rest" ) +// FakeWatchBufferSize is the max num of watch event can be buffered in the +// watch channel. Note that when watch event overflows or exceed this buffer +// size, manipulations via fake client may be blocked. +const FakeWatchBufferSize = 128 + // ObjectTracker keeps track of objects. It is intended to be used to // fake calls to a server by returning objects based on their kind, // namespace and name. @@ -54,6 +59,10 @@ type ObjectTracker interface { // didn't exist in the tracker prior to deletion, Delete returns // no error. Delete(gvr schema.GroupVersionResource, ns, name string) error + + // Watch watches objects from the tracker. Watch returns a channel + // which will push added / modified / deleted object. + Watch(gvr schema.GroupVersionResource, ns string) (watch.Interface, error) } // ObjectScheme abstracts the implementation of common operations on objects. @@ -132,6 +141,13 @@ type tracker struct { decoder runtime.Decoder lock sync.RWMutex objects map[schema.GroupVersionResource][]runtime.Object + // The value type of watchers is a map of which the key is either a namespace or + // all/non namespace aka "" and its value is list of fake watchers. Each of + // fake watcher holds a buffered channel of size "FakeWatchBufferSize" which + // is default to 128. Manipulations on resources will broadcast the notification + // events into the watchers' channel and note that too many unhandled event may + // potentially block the tracker. + watchers map[schema.GroupVersionResource]map[string][]*watch.FakeWatcher } var _ ObjectTracker = &tracker{} @@ -140,9 +156,10 @@ var _ ObjectTracker = &tracker{} // of objects for the fake clientset. Mostly useful for unit tests. func NewObjectTracker(scheme ObjectScheme, decoder runtime.Decoder) ObjectTracker { return &tracker{ - scheme: scheme, - decoder: decoder, - objects: make(map[schema.GroupVersionResource][]runtime.Object), + scheme: scheme, + decoder: decoder, + objects: make(map[schema.GroupVersionResource][]runtime.Object), + watchers: make(map[schema.GroupVersionResource]map[string][]*watch.FakeWatcher), } } @@ -185,6 +202,19 @@ func (t *tracker) List(gvr schema.GroupVersionResource, gvk schema.GroupVersionK return list.DeepCopyObject(), nil } +func (t *tracker) Watch(gvr schema.GroupVersionResource, ns string) (watch.Interface, error) { + t.lock.Lock() + defer t.lock.Unlock() + + fakewatcher := watch.NewFakeWithChanSize(FakeWatchBufferSize, true) + + if _, exists := t.watchers[gvr]; !exists { + t.watchers[gvr] = make(map[string][]*watch.FakeWatcher) + } + t.watchers[gvr][ns] = append(t.watchers[gvr][ns], fakewatcher) + return fakewatcher, nil +} + func (t *tracker) Get(gvr schema.GroupVersionResource, ns, name string) (runtime.Object, error) { errNotFound := errors.NewNotFound(gvr.GroupResource(), name) @@ -263,6 +293,19 @@ func (t *tracker) Update(gvr schema.GroupVersionResource, obj runtime.Object, ns return t.add(gvr, obj, ns, true) } +func (t *tracker) getWatches(gvr schema.GroupVersionResource, ns string) []*watch.FakeWatcher { + watches := []*watch.FakeWatcher{} + if t.watchers[gvr] != nil { + if w := t.watchers[gvr][ns]; w != nil { + watches = append(watches, w...) + } + if w := t.watchers[gvr][""]; w != nil { + watches = append(watches, w...) + } + } + return watches +} + func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns string, replaceExisting bool) error { t.lock.Lock() defer t.lock.Unlock() @@ -296,6 +339,9 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st } if oldMeta.GetNamespace() == newMeta.GetNamespace() && oldMeta.GetName() == newMeta.GetName() { if replaceExisting { + for _, w := range t.getWatches(gvr, ns) { + w.Modify(obj) + } t.objects[gvr][i] = obj return nil } @@ -310,6 +356,10 @@ func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns st t.objects[gvr] = append(t.objects[gvr], obj) + for _, w := range t.getWatches(gvr, ns) { + w.Add(obj) + } + return nil } @@ -342,7 +392,11 @@ func (t *tracker) Delete(gvr schema.GroupVersionResource, ns, name string) error return err } if objMeta.GetNamespace() == ns && objMeta.GetName() == name { + obj := t.objects[gvr][i] t.objects[gvr] = append(t.objects[gvr][:i], t.objects[gvr][i+1:]...) + for _, w := range t.getWatches(gvr, ns) { + w.Delete(obj) + } found = true break } diff --git a/testing/fixture_test.go b/testing/fixture_test.go new file mode 100644 index 00000000..967e0aef --- /dev/null +++ b/testing/fixture_test.go @@ -0,0 +1,192 @@ +/* +Copyright 2015 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 testing + +import ( + "fmt" + "math/rand" + "strconv" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/watch" +) + +func getArbitraryResource(s schema.GroupVersionResource, name, namespace string) *unstructured.Unstructured { + return &unstructured.Unstructured{ + Object: map[string]interface{}{ + "kind": s.Resource, + "apiVersion": s.Version, + "metadata": map[string]interface{}{ + "name": name, + "namespace": namespace, + "generateName": "test_generateName", + "uid": "test_uid", + "resourceVersion": "test_resourceVersion", + "selfLink": "test_selfLink", + }, + "data": strconv.Itoa(rand.Int()), + }, + } +} + +func TestWatchCallNonNamespace(t *testing.T) { + testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"} + testObj := getArbitraryResource(testResource, "test_name", "test_namespace") + accessor, err := meta.Accessor(testObj) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + ns := accessor.GetNamespace() + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + o := NewObjectTracker(scheme, codecs.UniversalDecoder()) + watch, err := o.Watch(testResource, ns) + go func() { + err := o.Create(testResource, testObj, ns) + if err != nil { + t.Errorf("test resource creation failed: %v", err) + } + }() + out := <-watch.ResultChan() + assert.Equal(t, testObj, out.Object, "watched object mismatch") +} + +func TestWatchCallAllNamespace(t *testing.T) { + testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"} + testObj := getArbitraryResource(testResource, "test_name", "test_namespace") + accessor, err := meta.Accessor(testObj) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + ns := accessor.GetNamespace() + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + o := NewObjectTracker(scheme, codecs.UniversalDecoder()) + w, err := o.Watch(testResource, "test_namespace") + wAll, err := o.Watch(testResource, "") + go func() { + err := o.Create(testResource, testObj, ns) + assert.NoError(t, err, "test resource creation failed") + }() + out := <-w.ResultChan() + outAll := <-wAll.ResultChan() + assert.Equal(t, watch.Added, out.Type, "watch event mismatch") + assert.Equal(t, watch.Added, outAll.Type, "watch event mismatch") + assert.Equal(t, testObj, out.Object, "watched created object mismatch") + assert.Equal(t, testObj, outAll.Object, "watched created object mismatch") + go func() { + err := o.Update(testResource, testObj, ns) + assert.NoError(t, err, "test resource updating failed") + }() + out = <-w.ResultChan() + outAll = <-wAll.ResultChan() + assert.Equal(t, watch.Modified, out.Type, "watch event mismatch") + assert.Equal(t, watch.Modified, outAll.Type, "watch event mismatch") + assert.Equal(t, testObj, out.Object, "watched updated object mismatch") + assert.Equal(t, testObj, outAll.Object, "watched updated object mismatch") + go func() { + err := o.Delete(testResource, "test_namespace", "test_name") + assert.NoError(t, err, "test resource deletion failed") + }() + out = <-w.ResultChan() + outAll = <-wAll.ResultChan() + assert.Equal(t, watch.Deleted, out.Type, "watch event mismatch") + assert.Equal(t, watch.Deleted, outAll.Type, "watch event mismatch") + assert.Equal(t, testObj, out.Object, "watched deleted object mismatch") + assert.Equal(t, testObj, outAll.Object, "watched deleted object mismatch") +} + +func TestWatchCallMultipleInvocation(t *testing.T) { + cases := []struct { + name string + op watch.EventType + }{ + { + "foo", + watch.Added, + }, + { + "bar", + watch.Added, + }, + { + "bar", + watch.Modified, + }, + { + "foo", + watch.Deleted, + }, + { + "bar", + watch.Deleted, + }, + } + + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + testResource := schema.GroupVersionResource{Group: "", Version: "test_version", Resource: "test_kind"} + + o := NewObjectTracker(scheme, codecs.UniversalDecoder()) + watchNamespaces := []string{ + "", + "", + "test_namespace", + "test_namespace", + } + var wg sync.WaitGroup + wg.Add(len(watchNamespaces)) + for idx, watchNamespace := range watchNamespaces { + i := idx + w, err := o.Watch(testResource, watchNamespace) + go func() { + assert.NoError(t, err, "watch invocation failed") + for _, c := range cases { + fmt.Printf("%#v %#v\n", c, i) + event := <-w.ResultChan() + accessor, err := meta.Accessor(event.Object) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + assert.Equal(t, c.op, event.Type, "watch event mismatched") + assert.Equal(t, c.name, accessor.GetName(), "watched object mismatch") + } + wg.Done() + }() + } + for _, c := range cases { + switch c.op { + case watch.Added: + obj := getArbitraryResource(testResource, c.name, "test_namespace") + o.Create(testResource, obj, "test_namespace") + case watch.Modified: + obj := getArbitraryResource(testResource, c.name, "test_namespace") + o.Update(testResource, obj, "test_namespace") + case watch.Deleted: + o.Delete(testResource, "test_namespace", c.name) + } + } + wg.Wait() +}