diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 81feed12e..f78948d21 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,1646 +1,1646 @@ { - "ImportPath": "k8s.io/apiserver", - "GoVersion": "go1.8", - "GodepVersion": "v79", - "Packages": [ - "./..." - ], - "Deps": [ - { - "ImportPath": "bitbucket.org/ww/goautoneg", - "Rev": "75cd24fc2f2c2a2088577d12123ddee5f54e0675" - }, - { - "ImportPath": "github.com/NYTimes/gziphandler", - "Rev": "56545f4a5d46df9a6648819d1664c3a03a13ffdb" - }, - { - "ImportPath": "github.com/PuerkitoBio/purell", - "Rev": "8a290539e2e8629dbc4e6bad948158f790ec31f4" - }, - { - "ImportPath": "github.com/PuerkitoBio/urlesc", - "Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e" - }, - { - "ImportPath": "github.com/beorn7/perks/quantile", - "Rev": "3ac7bf7a47d159a033b107610db8a1b6575507a4" - }, - { - "ImportPath": "github.com/boltdb/bolt", - "Rev": "583e8937c61f1af6513608ccc75c97b6abdf4ff9" - }, - { - "ImportPath": "github.com/coreos/etcd/alarm", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/auth", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/auth/authpb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/client", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/clientv3", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/compactor", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/discovery", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/error", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/api", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http/httptypes", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/auth", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/membership", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/etcdserver/stats", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/integration", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/lease", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/lease/leasehttp", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/lease/leasepb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/mvcc", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/mvcc/backend", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/adt", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/contention", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/cpuutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/crc", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/fileutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/httputil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/idutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/ioutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/logutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/monotime", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/netutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/pathutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/pbutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/runtime", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/schedule", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/testutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/tlsutil", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/transport", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/types", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/pkg/wait", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/proxy/grpcproxy", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/proxy/grpcproxy/cache", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/raft", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/raft/raftpb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/rafthttp", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/snap", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/snap/snappb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/store", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/version", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/wal", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "ImportPath": "github.com/coreos/etcd/wal/walpb", - "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" - }, - { - "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/go-semver/semver", - "Rev": "568e959cd89871e61434c1143528d9162da89ef2" - }, - { - "ImportPath": "github.com/coreos/go-systemd/daemon", - "Rev": "48702e0da86bd25e76cfef347e2adeb434a0d0a6" - }, - { - "ImportPath": "github.com/coreos/go-systemd/journal", - "Rev": "48702e0da86bd25e76cfef347e2adeb434a0d0a6" - }, - { - "ImportPath": "github.com/coreos/pkg/capnslog", - "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" - }, - { - "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/elazarl/go-bindata-assetfs", - "Rev": "3dcc96556217539f50599357fb481ac0dc7439b9" - }, - { - "ImportPath": "github.com/emicklei/go-restful", - "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" - }, - { - "ImportPath": "github.com/emicklei/go-restful-swagger12", - "Rev": "dcef7f55730566d41eae5db10e7d6981829720f6" - }, - { - "ImportPath": "github.com/emicklei/go-restful/log", - "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" - }, - { - "ImportPath": "github.com/evanphx/json-patch", - "Rev": "944e07253867aacae43c04b2e6a239005443f33a" - }, - { - "ImportPath": "github.com/ghodss/yaml", - "Rev": "73d445a93680fa1a78ae23a5839bad48f32ba1ee" - }, - { - "ImportPath": "github.com/go-openapi/jsonpointer", - "Rev": "46af16f9f7b149af66e5d1bd010e3574dc06de98" - }, - { - "ImportPath": "github.com/go-openapi/jsonreference", - "Rev": "13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272" - }, - { - "ImportPath": "github.com/go-openapi/spec", - "Rev": "7abd5745472fff5eb3685386d5fb8bf38683154d" - }, - { - "ImportPath": "github.com/go-openapi/swag", - "Rev": "f3f9494671f93fcff853e3c6e9e948b3eb71e590" - }, - { - "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/protobuf/jsonpb", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "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/struct", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/golang/protobuf/ptypes/timestamp", - "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" - }, - { - "ImportPath": "github.com/google/btree", - "Rev": "7d79101e329e5a3adf994758c578dab82b90c017" - }, - { - "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": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack", - "Rev": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - "Rev": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - "Rev": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - "Rev": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/openstack/utils", - "Rev": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gophercloud/gophercloud/pagination", - "Rev": "443743e88335413103dcf1997e46d401b264fbcd" - }, - { - "ImportPath": "github.com/gregjones/httpcache", - "Rev": "787624de3eb7bd915c329cba748687a3b22666a6" - }, - { - "ImportPath": "github.com/gregjones/httpcache/diskcache", - "Rev": "787624de3eb7bd915c329cba748687a3b22666a6" - }, - { - "ImportPath": "github.com/grpc-ecosystem/go-grpc-prometheus", - "Rev": "2500245aa6110c562d17020fb31a2c133d737799" - }, - { - "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/runtime", - "Rev": "84398b94e188ee336f307779b57b3aa91af7063c" - }, - { - "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/runtime/internal", - "Rev": "84398b94e188ee336f307779b57b3aa91af7063c" - }, - { - "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/utilities", - "Rev": "84398b94e188ee336f307779b57b3aa91af7063c" - }, - { - "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": "36b14963da70d11297d313183d7e6388c8510e1e" - }, - { - "ImportPath": "github.com/juju/ratelimit", - "Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342" - }, - { - "ImportPath": "github.com/karlseguin/ccache", - "Rev": "3ba9789cfd2cb7b4fb4657efc994cc1c599a648c" - }, - { - "ImportPath": "github.com/mailru/easyjson/buffer", - "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" - }, - { - "ImportPath": "github.com/mailru/easyjson/jlexer", - "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" - }, - { - "ImportPath": "github.com/mailru/easyjson/jwriter", - "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" - }, - { - "ImportPath": "github.com/matttproud/golang_protobuf_extensions/pbutil", - "Rev": "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a" - }, - { - "ImportPath": "github.com/mxk/go-flowrate/flowrate", - "Rev": "cca7078d478f8520f85629ad7c68962d31ed7682" - }, - { - "ImportPath": "github.com/pborman/uuid", - "Rev": "ca53cad383cad2479bbba7f7a1a05797ec1386e4" - }, - { - "ImportPath": "github.com/peterbourgon/diskv", - "Rev": "5f041e8faa004a95c88a202771f4cc3e991971e6" - }, - { - "ImportPath": "github.com/pkg/errors", - "Rev": "a22138067af1c4942683050411a841ade67fe1eb" - }, - { - "ImportPath": "github.com/pmezard/go-difflib/difflib", - "Rev": "d8ed2627bdf02c080bf22230dbb337003b7aba2d" - }, - { - "ImportPath": "github.com/prometheus/client_golang/prometheus", - "Rev": "e7e903064f5e9eb5da98208bae10b475d4db0f8c" - }, - { - "ImportPath": "github.com/prometheus/client_model/go", - "Rev": "fa8ad6fec33561be4280a8f0514318c79d7f6cb6" - }, - { - "ImportPath": "github.com/prometheus/common/expfmt", - "Rev": "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207" - }, - { - "ImportPath": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - "Rev": "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207" - }, - { - "ImportPath": "github.com/prometheus/common/model", - "Rev": "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207" - }, - { - "ImportPath": "github.com/prometheus/procfs", - "Rev": "65c1f6f8f0fc1e2185eb9863a3bc751496404259" - }, - { - "ImportPath": "github.com/prometheus/procfs/xfs", - "Rev": "65c1f6f8f0fc1e2185eb9863a3bc751496404259" - }, - { - "ImportPath": "github.com/spf13/pflag", - "Rev": "9ff6c6923cfffbcd502984b8e0c80539a94968b7" - }, - { - "ImportPath": "github.com/stretchr/testify/assert", - "Rev": "f6abca593680b2315d2075e0f5e2a9751e3f431a" - }, - { - "ImportPath": "github.com/stretchr/testify/require", - "Rev": "f6abca593680b2315d2075e0f5e2a9751e3f431a" - }, - { - "ImportPath": "github.com/ugorji/go/codec", - "Rev": "ded73eae5db7e7a0ef6f55aace87a2873c5d2b74" - }, - { - "ImportPath": "github.com/xiang90/probing", - "Rev": "07dd2e8dfe18522e9c447ba95f2fe95262f63bb2" - }, - { - "ImportPath": "golang.org/x/crypto/bcrypt", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/crypto/blowfish", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/crypto/nacl/secretbox", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/crypto/poly1305", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/crypto/salsa20/salsa", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/crypto/ssh/terminal", - "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" - }, - { - "ImportPath": "golang.org/x/net/context", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/html", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/html/atom", - "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/internal/timeseries", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/lex/httplex", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/trace", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/net/websocket", - "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" - }, - { - "ImportPath": "golang.org/x/sys/unix", - "Rev": "7ddbeae9ae08c6a06a59597f0c9edbc5ff2444ce" - }, - { - "ImportPath": "golang.org/x/sys/windows", - "Rev": "7ddbeae9ae08c6a06a59597f0c9edbc5ff2444ce" - }, - { - "ImportPath": "golang.org/x/text/cases", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/internal", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/internal/tag", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/language", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/runes", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/secure/bidirule", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/text/secure/precis", - "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": "golang.org/x/text/width", - "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" - }, - { - "ImportPath": "golang.org/x/time/rate", - "Rev": "f51c12702a4d776e4c1fa9b0fabab841babae631" - }, - { - "ImportPath": "google.golang.org/genproto/googleapis/rpc/status", - "Rev": "09f6ed296fc66555a25fe4ce95173148778dfa85" - }, - { - "ImportPath": "google.golang.org/grpc", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/codes", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/credentials", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/grpclb/grpc_lb_v1", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/grpclog", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/internal", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/keepalive", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/metadata", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/naming", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/peer", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/stats", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/status", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/tap", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "google.golang.org/grpc/transport", - "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" - }, - { - "ImportPath": "gopkg.in/inf.v0", - "Rev": "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4" - }, - { - "ImportPath": "gopkg.in/natefinch/lumberjack.v2", - "Rev": "20b71e5b60d756d3d2f80def009790325acc2b23" - }, - { - "ImportPath": "gopkg.in/yaml.v2", - "Rev": "53feefa2559fb8dfa8d81baad31be332c97d6c77" - }, - { - "ImportPath": "k8s.io/api/admission/v1alpha1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/apps/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/batch/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/core/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/networking/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/storage/v1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "17a3f183f04dfa071c501b62455af9b18dcdb7ea" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/validation", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/api/validation/path", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/validation", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/proxy", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/rand", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/uuid", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" - }, - { - "ImportPath": "k8s.io/client-go/discovery", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/discovery/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/admissionregistration", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/apps", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/apps/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/apps/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/apps/v1beta2", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/autoscaling", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/autoscaling/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/batch", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/batch/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/batch/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/batch/v2alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/certificates", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/certificates/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/core", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/core/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/extensions", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/extensions/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/internalinterfaces", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/networking", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/networking/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/policy", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/policy/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/rbac", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/rbac/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/rbac/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/scheduling", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/settings", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/settings/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/storage", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/storage/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/informers/storage/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/scheme", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/apps/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/apps/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/apps/v1beta2", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/autoscaling/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/batch/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/batch/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/batch/v2alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/certificates/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/core/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/extensions/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/networking/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/policy/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/rbac/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/rbac/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/settings/v1alpha1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/storage/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/listers/storage/v1beta1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/pkg/version", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/rest", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/rest/watch", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/testing", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/auth", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/cache", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/clientcmd", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/clientcmd/api", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/metrics", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/pager", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/tools/reference", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/transport", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/util/buffer", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/util/cert", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/util/flowcontrol", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/util/homedir", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/client-go/util/integer", - "Rev": "8d2eb60d1c0dbd03f490903a3825feb67fd6046a" - }, - { - "ImportPath": "k8s.io/kube-openapi/pkg/builder", - "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" - }, - { - "ImportPath": "k8s.io/kube-openapi/pkg/common", - "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" - }, - { - "ImportPath": "k8s.io/kube-openapi/pkg/handler", - "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" - }, - { - "ImportPath": "k8s.io/kube-openapi/pkg/util", - "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" - } - ] + "ImportPath": "k8s.io/apiserver", + "GoVersion": "go1.8", + "GodepVersion": "v79", + "Packages": [ + "./..." + ], + "Deps": [ + { + "ImportPath": "bitbucket.org/ww/goautoneg", + "Rev": "75cd24fc2f2c2a2088577d12123ddee5f54e0675" + }, + { + "ImportPath": "github.com/NYTimes/gziphandler", + "Rev": "56545f4a5d46df9a6648819d1664c3a03a13ffdb" + }, + { + "ImportPath": "github.com/PuerkitoBio/purell", + "Rev": "8a290539e2e8629dbc4e6bad948158f790ec31f4" + }, + { + "ImportPath": "github.com/PuerkitoBio/urlesc", + "Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e" + }, + { + "ImportPath": "github.com/beorn7/perks/quantile", + "Rev": "3ac7bf7a47d159a033b107610db8a1b6575507a4" + }, + { + "ImportPath": "github.com/boltdb/bolt", + "Rev": "583e8937c61f1af6513608ccc75c97b6abdf4ff9" + }, + { + "ImportPath": "github.com/coreos/etcd/alarm", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/auth", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/auth/authpb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/client", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/clientv3", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/compactor", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/discovery", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/error", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/api", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/api/v2http/httptypes", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/auth", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/membership", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/stats", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/integration", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/lease", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/lease/leasehttp", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/lease/leasepb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/mvcc", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/mvcc/backend", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/adt", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/contention", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/cpuutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/crc", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/fileutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/httputil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/idutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/ioutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/logutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/monotime", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/netutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/pathutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/pbutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/runtime", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/schedule", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/testutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/tlsutil", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/transport", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/types", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/wait", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/proxy/grpcproxy", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/proxy/grpcproxy/cache", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/raft", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/raft/raftpb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/rafthttp", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/snap", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/snap/snappb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/store", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/version", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/wal", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "ImportPath": "github.com/coreos/etcd/wal/walpb", + "Rev": "0520cb9304cb2385f7e72b8bc02d6e4d3257158a" + }, + { + "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/go-semver/semver", + "Rev": "568e959cd89871e61434c1143528d9162da89ef2" + }, + { + "ImportPath": "github.com/coreos/go-systemd/daemon", + "Rev": "48702e0da86bd25e76cfef347e2adeb434a0d0a6" + }, + { + "ImportPath": "github.com/coreos/go-systemd/journal", + "Rev": "48702e0da86bd25e76cfef347e2adeb434a0d0a6" + }, + { + "ImportPath": "github.com/coreos/pkg/capnslog", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" + }, + { + "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/elazarl/go-bindata-assetfs", + "Rev": "3dcc96556217539f50599357fb481ac0dc7439b9" + }, + { + "ImportPath": "github.com/emicklei/go-restful", + "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" + }, + { + "ImportPath": "github.com/emicklei/go-restful-swagger12", + "Rev": "dcef7f55730566d41eae5db10e7d6981829720f6" + }, + { + "ImportPath": "github.com/emicklei/go-restful/log", + "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" + }, + { + "ImportPath": "github.com/evanphx/json-patch", + "Rev": "944e07253867aacae43c04b2e6a239005443f33a" + }, + { + "ImportPath": "github.com/ghodss/yaml", + "Rev": "73d445a93680fa1a78ae23a5839bad48f32ba1ee" + }, + { + "ImportPath": "github.com/go-openapi/jsonpointer", + "Rev": "46af16f9f7b149af66e5d1bd010e3574dc06de98" + }, + { + "ImportPath": "github.com/go-openapi/jsonreference", + "Rev": "13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272" + }, + { + "ImportPath": "github.com/go-openapi/spec", + "Rev": "7abd5745472fff5eb3685386d5fb8bf38683154d" + }, + { + "ImportPath": "github.com/go-openapi/swag", + "Rev": "f3f9494671f93fcff853e3c6e9e948b3eb71e590" + }, + { + "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/protobuf/jsonpb", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "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/struct", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/golang/protobuf/ptypes/timestamp", + "Rev": "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + }, + { + "ImportPath": "github.com/google/btree", + "Rev": "7d79101e329e5a3adf994758c578dab82b90c017" + }, + { + "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": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack", + "Rev": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", + "Rev": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", + "Rev": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", + "Rev": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/openstack/utils", + "Rev": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gophercloud/gophercloud/pagination", + "Rev": "443743e88335413103dcf1997e46d401b264fbcd" + }, + { + "ImportPath": "github.com/gregjones/httpcache", + "Rev": "787624de3eb7bd915c329cba748687a3b22666a6" + }, + { + "ImportPath": "github.com/gregjones/httpcache/diskcache", + "Rev": "787624de3eb7bd915c329cba748687a3b22666a6" + }, + { + "ImportPath": "github.com/grpc-ecosystem/go-grpc-prometheus", + "Rev": "2500245aa6110c562d17020fb31a2c133d737799" + }, + { + "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/runtime", + "Rev": "84398b94e188ee336f307779b57b3aa91af7063c" + }, + { + "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/runtime/internal", + "Rev": "84398b94e188ee336f307779b57b3aa91af7063c" + }, + { + "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/utilities", + "Rev": "84398b94e188ee336f307779b57b3aa91af7063c" + }, + { + "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": "36b14963da70d11297d313183d7e6388c8510e1e" + }, + { + "ImportPath": "github.com/juju/ratelimit", + "Rev": "5b9ff866471762aa2ab2dced63c9fb6f53921342" + }, + { + "ImportPath": "github.com/karlseguin/ccache", + "Rev": "3ba9789cfd2cb7b4fb4657efc994cc1c599a648c" + }, + { + "ImportPath": "github.com/mailru/easyjson/buffer", + "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" + }, + { + "ImportPath": "github.com/mailru/easyjson/jlexer", + "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" + }, + { + "ImportPath": "github.com/mailru/easyjson/jwriter", + "Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d" + }, + { + "ImportPath": "github.com/matttproud/golang_protobuf_extensions/pbutil", + "Rev": "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a" + }, + { + "ImportPath": "github.com/mxk/go-flowrate/flowrate", + "Rev": "cca7078d478f8520f85629ad7c68962d31ed7682" + }, + { + "ImportPath": "github.com/pborman/uuid", + "Rev": "ca53cad383cad2479bbba7f7a1a05797ec1386e4" + }, + { + "ImportPath": "github.com/peterbourgon/diskv", + "Rev": "5f041e8faa004a95c88a202771f4cc3e991971e6" + }, + { + "ImportPath": "github.com/pkg/errors", + "Rev": "a22138067af1c4942683050411a841ade67fe1eb" + }, + { + "ImportPath": "github.com/pmezard/go-difflib/difflib", + "Rev": "d8ed2627bdf02c080bf22230dbb337003b7aba2d" + }, + { + "ImportPath": "github.com/prometheus/client_golang/prometheus", + "Rev": "e7e903064f5e9eb5da98208bae10b475d4db0f8c" + }, + { + "ImportPath": "github.com/prometheus/client_model/go", + "Rev": "fa8ad6fec33561be4280a8f0514318c79d7f6cb6" + }, + { + "ImportPath": "github.com/prometheus/common/expfmt", + "Rev": "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207" + }, + { + "ImportPath": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", + "Rev": "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207" + }, + { + "ImportPath": "github.com/prometheus/common/model", + "Rev": "13ba4ddd0caa9c28ca7b7bffe1dfa9ed8d5ef207" + }, + { + "ImportPath": "github.com/prometheus/procfs", + "Rev": "65c1f6f8f0fc1e2185eb9863a3bc751496404259" + }, + { + "ImportPath": "github.com/prometheus/procfs/xfs", + "Rev": "65c1f6f8f0fc1e2185eb9863a3bc751496404259" + }, + { + "ImportPath": "github.com/spf13/pflag", + "Rev": "9ff6c6923cfffbcd502984b8e0c80539a94968b7" + }, + { + "ImportPath": "github.com/stretchr/testify/assert", + "Rev": "f6abca593680b2315d2075e0f5e2a9751e3f431a" + }, + { + "ImportPath": "github.com/stretchr/testify/require", + "Rev": "f6abca593680b2315d2075e0f5e2a9751e3f431a" + }, + { + "ImportPath": "github.com/ugorji/go/codec", + "Rev": "ded73eae5db7e7a0ef6f55aace87a2873c5d2b74" + }, + { + "ImportPath": "github.com/xiang90/probing", + "Rev": "07dd2e8dfe18522e9c447ba95f2fe95262f63bb2" + }, + { + "ImportPath": "golang.org/x/crypto/bcrypt", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/crypto/blowfish", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/crypto/nacl/secretbox", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/crypto/poly1305", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/crypto/salsa20/salsa", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/crypto/ssh/terminal", + "Rev": "81e90905daefcd6fd217b62423c0908922eadb30" + }, + { + "ImportPath": "golang.org/x/net/context", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/html", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/html/atom", + "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/internal/timeseries", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/lex/httplex", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/trace", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/net/websocket", + "Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f" + }, + { + "ImportPath": "golang.org/x/sys/unix", + "Rev": "7ddbeae9ae08c6a06a59597f0c9edbc5ff2444ce" + }, + { + "ImportPath": "golang.org/x/sys/windows", + "Rev": "7ddbeae9ae08c6a06a59597f0c9edbc5ff2444ce" + }, + { + "ImportPath": "golang.org/x/text/cases", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/internal", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/internal/tag", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/language", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/runes", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/secure/bidirule", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/text/secure/precis", + "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": "golang.org/x/text/width", + "Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01" + }, + { + "ImportPath": "golang.org/x/time/rate", + "Rev": "f51c12702a4d776e4c1fa9b0fabab841babae631" + }, + { + "ImportPath": "google.golang.org/genproto/googleapis/rpc/status", + "Rev": "09f6ed296fc66555a25fe4ce95173148778dfa85" + }, + { + "ImportPath": "google.golang.org/grpc", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/codes", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/credentials", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/grpclb/grpc_lb_v1", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/grpclog", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/internal", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/keepalive", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/metadata", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/naming", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/peer", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/stats", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/status", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/tap", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "google.golang.org/grpc/transport", + "Rev": "d2e1b51f33ff8c5e4a15560ff049d200e83726c5" + }, + { + "ImportPath": "gopkg.in/inf.v0", + "Rev": "3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4" + }, + { + "ImportPath": "gopkg.in/natefinch/lumberjack.v2", + "Rev": "20b71e5b60d756d3d2f80def009790325acc2b23" + }, + { + "ImportPath": "gopkg.in/yaml.v2", + "Rev": "53feefa2559fb8dfa8d81baad31be332c97d6c77" + }, + { + "ImportPath": "k8s.io/api/admission/v1alpha1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/apps/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/apps/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/apps/v1beta2", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/authentication/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/authentication/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/authorization/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/authorization/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/autoscaling/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/autoscaling/v2beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/batch/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/batch/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/batch/v2alpha1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/certificates/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/core/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/extensions/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/networking/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/policy/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/rbac/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/rbac/v1alpha1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/rbac/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/scheduling/v1alpha1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/settings/v1alpha1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/storage/v1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/api/storage/v1beta1", + "Rev": "2e25e2fde0d6648d215d9a9c53b78b09d9df4bff" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/equality", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/errors", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/meta", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/resource", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/validation", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/api/validation/path", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/validation", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1alpha1", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/conversion/unstructured", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/fields", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/labels", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/selection", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/types", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/cache", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/clock", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/diff", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/errors", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/framer", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/json", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/net", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/proxy", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/rand", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/sets", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/uuid", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/validation", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/wait", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/version", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/watch", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", + "Rev": "5c2ad6597ec5889151b8076d2a54b001605c69ed" + }, + { + "ImportPath": "k8s.io/client-go/discovery", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/discovery/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/admissionregistration", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/apps", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/apps/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/apps/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/apps/v1beta2", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/autoscaling", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/autoscaling/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/batch", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/batch/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/batch/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/batch/v2alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/certificates", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/certificates/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/core", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/core/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/extensions", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/extensions/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/internalinterfaces", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/networking", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/networking/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/policy", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/policy/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/rbac", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/rbac/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/rbac/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/scheduling", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/settings", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/settings/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/storage", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/storage/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/informers/storage/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/scheme", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/apps/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/apps/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/apps/v1beta2", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/autoscaling/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/batch/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/batch/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/batch/v2alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/certificates/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/core/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/extensions/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/networking/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/policy/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/rbac/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/rbac/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/settings/v1alpha1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/storage/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/listers/storage/v1beta1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/pkg/version", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/rest", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/rest/watch", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/testing", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/auth", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/cache", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/clientcmd", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/clientcmd/api", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/metrics", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/pager", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/tools/reference", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/transport", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/util/buffer", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/util/cert", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/util/flowcontrol", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/util/homedir", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/client-go/util/integer", + "Rev": "a214e4908ef8240b8cb4973ae09ca0c37a29ecf2" + }, + { + "ImportPath": "k8s.io/kube-openapi/pkg/builder", + "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" + }, + { + "ImportPath": "k8s.io/kube-openapi/pkg/common", + "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" + }, + { + "ImportPath": "k8s.io/kube-openapi/pkg/handler", + "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" + }, + { + "ImportPath": "k8s.io/kube-openapi/pkg/util", + "Rev": "39a7bf85c140f972372c2a0d1ee40adbf0c8bfe1" + } + ] } diff --git a/pkg/admission/configuration/BUILD b/pkg/admission/configuration/BUILD index d2cb75d9f..5d1242a41 100644 --- a/pkg/admission/configuration/BUILD +++ b/pkg/admission/configuration/BUILD @@ -10,8 +10,9 @@ go_test( name = "go_default_test", srcs = [ "configuration_manager_test.go", - "external_admission_hook_manager_test.go", "initializer_manager_test.go", + "mutating_webhook_manager_test.go", + "validating_webhook_manager_test.go", ], importpath = "k8s.io/apiserver/pkg/admission/configuration", library = ":go_default_library", @@ -29,8 +30,9 @@ go_library( name = "go_default_library", srcs = [ "configuration_manager.go", - "external_admission_hook_manager.go", "initializer_manager.go", + "mutating_webhook_manager.go", + "validating_webhook_manager.go", ], importpath = "k8s.io/apiserver/pkg/admission/configuration", deps = [ diff --git a/pkg/admission/configuration/external_admission_hook_manager.go b/pkg/admission/configuration/external_admission_hook_manager.go deleted file mode 100644 index 024f5fae0..000000000 --- a/pkg/admission/configuration/external_admission_hook_manager.go +++ /dev/null @@ -1,83 +0,0 @@ -/* -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 configuration - -import ( - "fmt" - "reflect" - - "github.com/golang/glog" - - "k8s.io/api/admissionregistration/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" -) - -type ExternalAdmissionHookConfigurationLister interface { - List(opts metav1.ListOptions) (*v1alpha1.ExternalAdmissionHookConfigurationList, error) -} - -type ExternalAdmissionHookConfigurationManager struct { - *poller -} - -func NewExternalAdmissionHookConfigurationManager(c ExternalAdmissionHookConfigurationLister) *ExternalAdmissionHookConfigurationManager { - getFn := func() (runtime.Object, error) { - list, err := c.List(metav1.ListOptions{}) - if err != nil { - if errors.IsNotFound(err) || errors.IsForbidden(err) { - glog.V(5).Infof("ExternalAdmissionHookConfiguration are disabled due to an error: %v", err) - return nil, ErrDisabled - } - return nil, err - } - return mergeExternalAdmissionHookConfigurations(list), nil - } - - return &ExternalAdmissionHookConfigurationManager{ - newPoller(getFn), - } -} - -// ExternalAdmissionHooks returns the merged ExternalAdmissionHookConfiguration. -func (im *ExternalAdmissionHookConfigurationManager) ExternalAdmissionHooks() (*v1alpha1.ExternalAdmissionHookConfiguration, error) { - configuration, err := im.poller.configuration() - if err != nil { - return nil, err - } - externalAdmissionHookConfiguration, ok := configuration.(*v1alpha1.ExternalAdmissionHookConfiguration) - if !ok { - return nil, fmt.Errorf("expected type %v, got type %v", reflect.TypeOf(externalAdmissionHookConfiguration), reflect.TypeOf(configuration)) - } - return externalAdmissionHookConfiguration, nil -} - -func (im *ExternalAdmissionHookConfigurationManager) Run(stopCh <-chan struct{}) { - im.poller.Run(stopCh) -} - -func mergeExternalAdmissionHookConfigurations( - list *v1alpha1.ExternalAdmissionHookConfigurationList, -) *v1alpha1.ExternalAdmissionHookConfiguration { - configurations := list.Items - var ret v1alpha1.ExternalAdmissionHookConfiguration - for _, c := range configurations { - ret.ExternalAdmissionHooks = append(ret.ExternalAdmissionHooks, c.ExternalAdmissionHooks...) - } - return &ret -} diff --git a/pkg/admission/configuration/mutating_webhook_manager.go b/pkg/admission/configuration/mutating_webhook_manager.go new file mode 100644 index 000000000..0f5b7bd91 --- /dev/null +++ b/pkg/admission/configuration/mutating_webhook_manager.go @@ -0,0 +1,101 @@ +/* +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 configuration + +import ( + "fmt" + "reflect" + "sort" + + "github.com/golang/glog" + + "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +type MutatingWebhookConfigurationLister interface { + List(opts metav1.ListOptions) (*v1alpha1.MutatingWebhookConfigurationList, error) +} + +// MutatingWebhookConfigurationManager collects the mutating webhook objects so that they can be called. +type MutatingWebhookConfigurationManager struct { + *poller +} + +func NewMutatingWebhookConfigurationManager(c MutatingWebhookConfigurationLister) *MutatingWebhookConfigurationManager { + getFn := func() (runtime.Object, error) { + list, err := c.List(metav1.ListOptions{}) + if err != nil { + if errors.IsNotFound(err) || errors.IsForbidden(err) { + glog.V(5).Infof("MutatingWebhookConfiguration are disabled due to an error: %v", err) + return nil, ErrDisabled + } + return nil, err + } + return mergeMutatingWebhookConfigurations(list), nil + } + + return &MutatingWebhookConfigurationManager{ + newPoller(getFn), + } +} + +// Webhooks returns the merged MutatingWebhookConfiguration. +func (im *MutatingWebhookConfigurationManager) Webhooks() (*v1alpha1.MutatingWebhookConfiguration, error) { + configuration, err := im.poller.configuration() + if err != nil { + return nil, err + } + mutatingWebhookConfiguration, ok := configuration.(*v1alpha1.MutatingWebhookConfiguration) + if !ok { + return nil, fmt.Errorf("expected type %v, got type %v", reflect.TypeOf(mutatingWebhookConfiguration), reflect.TypeOf(configuration)) + } + return mutatingWebhookConfiguration, nil +} + +func (im *MutatingWebhookConfigurationManager) Run(stopCh <-chan struct{}) { + im.poller.Run(stopCh) +} + +func mergeMutatingWebhookConfigurations( + list *v1alpha1.MutatingWebhookConfigurationList, +) *v1alpha1.MutatingWebhookConfiguration { + configurations := append([]v1alpha1.MutatingWebhookConfiguration{}, list.Items...) + var ret v1alpha1.MutatingWebhookConfiguration + // The internal order of webhooks for each configuration is provided by the user + // but configurations themselves can be in any order. As we are going to run these + // webhooks in serial, they are sorted here to have a deterministic order. + sort.Sort(byName(configurations)) + for _, c := range configurations { + ret.Webhooks = append(ret.Webhooks, c.Webhooks...) + } + return &ret +} + +// byName sorts MutatingWebhookConfiguration by name. These objects are all in +// cluster namespace (aka no namespace) thus they all have unique names. +type byName []v1alpha1.MutatingWebhookConfiguration + +func (x byName) Len() int { return len(x) } + +func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } + +func (x byName) Less(i, j int) bool { + return x[i].ObjectMeta.Name < x[j].ObjectMeta.Name +} diff --git a/pkg/admission/configuration/mutating_webhook_manager_test.go b/pkg/admission/configuration/mutating_webhook_manager_test.go new file mode 100644 index 000000000..1cbf2d0d1 --- /dev/null +++ b/pkg/admission/configuration/mutating_webhook_manager_test.go @@ -0,0 +1,40 @@ +/* +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 configuration + +import ( + "testing" + + "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +type disabledMutatingWebhookConfigLister struct{} + +func (l *disabledMutatingWebhookConfigLister) List(options metav1.ListOptions) (*v1alpha1.MutatingWebhookConfigurationList, error) { + return nil, errors.NewNotFound(schema.GroupResource{Group: "admissionregistration", Resource: "MutatingWebhookConfigurations"}, "") +} +func TestMutatingWebhookConfigDisabled(t *testing.T) { + manager := NewMutatingWebhookConfigurationManager(&disabledMutatingWebhookConfigLister{}) + manager.sync() + _, err := manager.Webhooks() + if err.Error() != ErrDisabled.Error() { + t.Errorf("expected %v, got %v", ErrDisabled, err) + } +} diff --git a/pkg/admission/configuration/validating_webhook_manager.go b/pkg/admission/configuration/validating_webhook_manager.go new file mode 100644 index 000000000..e3287ce4e --- /dev/null +++ b/pkg/admission/configuration/validating_webhook_manager.go @@ -0,0 +1,84 @@ +/* +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 configuration + +import ( + "fmt" + "reflect" + + "github.com/golang/glog" + + "k8s.io/api/admissionregistration/v1alpha1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +type ValidatingWebhookConfigurationLister interface { + List(opts metav1.ListOptions) (*v1alpha1.ValidatingWebhookConfigurationList, error) +} + +// ValidatingWebhookConfigurationManager collects the validating webhook objects so that they can be called. +type ValidatingWebhookConfigurationManager struct { + *poller +} + +func NewValidatingWebhookConfigurationManager(c ValidatingWebhookConfigurationLister) *ValidatingWebhookConfigurationManager { + getFn := func() (runtime.Object, error) { + list, err := c.List(metav1.ListOptions{}) + if err != nil { + if errors.IsNotFound(err) || errors.IsForbidden(err) { + glog.V(5).Infof("ValidatingWebhookConfiguration are disabled due to an error: %v", err) + return nil, ErrDisabled + } + return nil, err + } + return mergeValidatingWebhookConfigurations(list), nil + } + + return &ValidatingWebhookConfigurationManager{ + newPoller(getFn), + } +} + +// Webhooks returns the merged ValidatingWebhookConfiguration. +func (im *ValidatingWebhookConfigurationManager) Webhooks() (*v1alpha1.ValidatingWebhookConfiguration, error) { + configuration, err := im.poller.configuration() + if err != nil { + return nil, err + } + validatingWebhookConfiguration, ok := configuration.(*v1alpha1.ValidatingWebhookConfiguration) + if !ok { + return nil, fmt.Errorf("expected type %v, got type %v", reflect.TypeOf(validatingWebhookConfiguration), reflect.TypeOf(configuration)) + } + return validatingWebhookConfiguration, nil +} + +func (im *ValidatingWebhookConfigurationManager) Run(stopCh <-chan struct{}) { + im.poller.Run(stopCh) +} + +func mergeValidatingWebhookConfigurations( + list *v1alpha1.ValidatingWebhookConfigurationList, +) *v1alpha1.ValidatingWebhookConfiguration { + configurations := list.Items + var ret v1alpha1.ValidatingWebhookConfiguration + for _, c := range configurations { + ret.Webhooks = append(ret.Webhooks, c.Webhooks...) + } + return &ret +} diff --git a/pkg/admission/configuration/external_admission_hook_manager_test.go b/pkg/admission/configuration/validating_webhook_manager_test.go similarity index 72% rename from pkg/admission/configuration/external_admission_hook_manager_test.go rename to pkg/admission/configuration/validating_webhook_manager_test.go index 1b849b1d2..946747150 100644 --- a/pkg/admission/configuration/external_admission_hook_manager_test.go +++ b/pkg/admission/configuration/validating_webhook_manager_test.go @@ -25,15 +25,15 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) -type disabledWebhookConfigLister struct{} +type disabledValidatingWebhookConfigLister struct{} -func (l *disabledWebhookConfigLister) List(options metav1.ListOptions) (*v1alpha1.ExternalAdmissionHookConfigurationList, error) { - return nil, errors.NewNotFound(schema.GroupResource{Group: "admissionregistration", Resource: "externalAdmissionHookConfigurations"}, "") +func (l *disabledValidatingWebhookConfigLister) List(options metav1.ListOptions) (*v1alpha1.ValidatingWebhookConfigurationList, error) { + return nil, errors.NewNotFound(schema.GroupResource{Group: "admissionregistration", Resource: "ValidatingWebhookConfigurations"}, "") } func TestWebhookConfigDisabled(t *testing.T) { - manager := NewExternalAdmissionHookConfigurationManager(&disabledWebhookConfigLister{}) + manager := NewValidatingWebhookConfigurationManager(&disabledValidatingWebhookConfigLister{}) manager.sync() - _, err := manager.ExternalAdmissionHooks() + _, err := manager.Webhooks() if err.Error() != ErrDisabled.Error() { t.Errorf("expected %v, got %v", ErrDisabled, err) } diff --git a/pkg/admission/plugin/webhook/admission.go b/pkg/admission/plugin/webhook/admission.go index ab12ba896..1238f4a5c 100644 --- a/pkg/admission/plugin/webhook/admission.go +++ b/pkg/admission/plugin/webhook/admission.go @@ -75,7 +75,7 @@ func Register(plugins *admission.Plugins) { // WebhookSource can list dynamic webhook plugins. type WebhookSource interface { Run(stopCh <-chan struct{}) - ExternalAdmissionHooks() (*v1alpha1.ExternalAdmissionHookConfiguration, error) + Webhooks() (*v1alpha1.ValidatingWebhookConfiguration, error) } // NewGenericAdmissionWebhook returns a generic admission webhook plugin. @@ -153,7 +153,7 @@ func (a *GenericAdmissionWebhook) SetScheme(scheme *runtime.Scheme) { // WantsExternalKubeClientSet defines a function which sets external ClientSet for admission plugins that need it func (a *GenericAdmissionWebhook) SetExternalKubeClientSet(client clientset.Interface) { - a.hookSource = configuration.NewExternalAdmissionHookConfigurationManager(client.AdmissionregistrationV1alpha1().ExternalAdmissionHookConfigurations()) + a.hookSource = configuration.NewValidatingWebhookConfigurationManager(client.AdmissionregistrationV1alpha1().ValidatingWebhookConfigurations()) } // ValidateInitialization implements the InitializationValidator interface. @@ -168,19 +168,19 @@ func (a *GenericAdmissionWebhook) ValidateInitialization() error { return nil } -func (a *GenericAdmissionWebhook) loadConfiguration(attr admission.Attributes) (*v1alpha1.ExternalAdmissionHookConfiguration, error) { - hookConfig, err := a.hookSource.ExternalAdmissionHooks() - // if ExternalAdmissionHook configuration is disabled, fail open +func (a *GenericAdmissionWebhook) loadConfiguration(attr admission.Attributes) (*v1alpha1.ValidatingWebhookConfiguration, error) { + hookConfig, err := a.hookSource.Webhooks() + // if Webhook configuration is disabled, fail open if err == configuration.ErrDisabled { - return &v1alpha1.ExternalAdmissionHookConfiguration{}, nil + return &v1alpha1.ValidatingWebhookConfiguration{}, nil } if err != nil { e := apierrors.NewServerTimeout(attr.GetResource().GroupResource(), string(attr.GetOperation()), 1) - e.ErrStatus.Message = fmt.Sprintf("Unable to refresh the ExternalAdmissionHook configuration: %v", err) + e.ErrStatus.Message = fmt.Sprintf("Unable to refresh the Webhook configuration: %v", err) e.ErrStatus.Reason = "LoadingConfiguration" e.ErrStatus.Details.Causes = append(e.ErrStatus.Details.Causes, metav1.StatusCause{ - Type: "ExternalAdmissionHookConfigurationFailure", - Message: "An error has occurred while refreshing the externalAdmissionHook configuration, no resources can be created/updated/deleted/connected until a refresh succeeds.", + Type: "ValidatingWebhookConfigurationFailure", + Message: "An error has occurred while refreshing the ValidatingWebhook configuration, no resources can be created/updated/deleted/connected until a refresh succeeds.", }) return nil, e } @@ -193,14 +193,14 @@ func (a *GenericAdmissionWebhook) Admit(attr admission.Attributes) error { if err != nil { return err } - hooks := hookConfig.ExternalAdmissionHooks + hooks := hookConfig.Webhooks ctx := context.TODO() errCh := make(chan error, len(hooks)) wg := sync.WaitGroup{} wg.Add(len(hooks)) for i := range hooks { - go func(hook *v1alpha1.ExternalAdmissionHook) { + go func(hook *v1alpha1.Webhook) { defer wg.Done() err := a.callHook(ctx, hook, attr) @@ -245,7 +245,7 @@ func (a *GenericAdmissionWebhook) Admit(attr admission.Attributes) error { return errs[0] } -func (a *GenericAdmissionWebhook) callHook(ctx context.Context, h *v1alpha1.ExternalAdmissionHook, attr admission.Attributes) error { +func (a *GenericAdmissionWebhook) callHook(ctx context.Context, h *v1alpha1.Webhook, attr admission.Attributes) error { matches := false for _, r := range h.Rules { m := RuleMatcher{Rule: r, Attr: attr} @@ -299,7 +299,7 @@ func toStatusErr(name string, result *metav1.Status) *apierrors.StatusError { } } -func (a *GenericAdmissionWebhook) hookClient(h *v1alpha1.ExternalAdmissionHook) (*rest.RESTClient, error) { +func (a *GenericAdmissionWebhook) hookClient(h *v1alpha1.Webhook) (*rest.RESTClient, error) { serverName := h.ClientConfig.Service.Name + "." + h.ClientConfig.Service.Namespace + ".svc" u, err := a.serviceResolver.ResolveEndpoint(h.ClientConfig.Service.Namespace, h.ClientConfig.Service.Name) if err != nil { diff --git a/pkg/admission/plugin/webhook/admission_test.go b/pkg/admission/plugin/webhook/admission_test.go index 5124cb3a0..ae4205bb7 100644 --- a/pkg/admission/plugin/webhook/admission_test.go +++ b/pkg/admission/plugin/webhook/admission_test.go @@ -39,15 +39,15 @@ import ( ) type fakeHookSource struct { - hooks []registrationv1alpha1.ExternalAdmissionHook + hooks []registrationv1alpha1.Webhook err error } -func (f *fakeHookSource) ExternalAdmissionHooks() (*registrationv1alpha1.ExternalAdmissionHookConfiguration, error) { +func (f *fakeHookSource) Webhooks() (*registrationv1alpha1.ValidatingWebhookConfiguration, error) { if f.err != nil { return nil, f.err } - return ®istrationv1alpha1.ExternalAdmissionHookConfiguration{ExternalAdmissionHooks: f.hooks}, nil + return ®istrationv1alpha1.ValidatingWebhookConfiguration{Webhooks: f.hooks}, nil } func (f *fakeHookSource) Run(stopCh <-chan struct{}) {} @@ -137,8 +137,8 @@ func TestAdmit(t *testing.T) { expectAllow bool errorContains string } - ccfg := func(urlPath string) registrationv1alpha1.AdmissionHookClientConfig { - return registrationv1alpha1.AdmissionHookClientConfig{ + ccfg := func(urlPath string) registrationv1alpha1.WebhookClientConfig { + return registrationv1alpha1.WebhookClientConfig{ Service: registrationv1alpha1.ServiceReference{ Name: "webhook-test", Namespace: "default", @@ -163,7 +163,7 @@ func TestAdmit(t *testing.T) { table := map[string]test{ "no match": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "nomatch", ClientConfig: ccfg("disallow"), Rules: []registrationv1alpha1.RuleWithOperations{{ @@ -175,7 +175,7 @@ func TestAdmit(t *testing.T) { }, "match & allow": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "allow", ClientConfig: ccfg("allow"), Rules: matchEverythingRules, @@ -185,7 +185,7 @@ func TestAdmit(t *testing.T) { }, "match & disallow": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "disallow", ClientConfig: ccfg("disallow"), Rules: matchEverythingRules, @@ -195,7 +195,7 @@ func TestAdmit(t *testing.T) { }, "match & disallow ii": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "disallowReason", ClientConfig: ccfg("disallowReason"), Rules: matchEverythingRules, @@ -205,7 +205,7 @@ func TestAdmit(t *testing.T) { }, "match & fail (but allow because fail open)": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "internalErr A", ClientConfig: ccfg("internalErr"), Rules: matchEverythingRules, @@ -226,7 +226,7 @@ func TestAdmit(t *testing.T) { }, "match & fail (but disallow because fail closed on nil)": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "internalErr A", ClientConfig: ccfg("internalErr"), Rules: matchEverythingRules, @@ -244,7 +244,7 @@ func TestAdmit(t *testing.T) { }, "match & fail (but fail because fail closed)": { hookSource: fakeHookSource{ - hooks: []registrationv1alpha1.ExternalAdmissionHook{{ + hooks: []registrationv1alpha1.Webhook{{ Name: "internalErr A", ClientConfig: ccfg("internalErr"), Rules: matchEverythingRules,