diff --git a/Gopkg.lock b/Gopkg.lock index bf3d9650b7f..89ac18fd997 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,20 +2,24 @@ [[projects]] - digest = "1:08636edd4ac1b095a9689b7a07763aa70e035068e0ff0e9dbfe2b6299b98e498" + digest = "1:459fdedd3611669c4f03938783e843945f7bf8fefd73326856a23d68202a43b2" name = "cloud.google.com/go" packages = [ + ".", "compute/metadata", + "container/apiv1", "iam", "internal", "internal/optional", "internal/trace", "internal/version", + "monitoring/apiv3", "storage", + "trace/apiv2", ] pruneopts = "UT" - revision = "74b12019e2aa53ec27882158f59192d7cd6d1998" - version = "v0.33.1" + revision = "d1ee711ee996fa74abaffbdb572963f368f215a9" + version = "v0.49.0" [[projects]] digest = "1:a0f79124a2fba5112d3d1466b917daf508e548c6c2da106399df92a79e06628b" @@ -25,6 +29,16 @@ revision = "f4a2c1e53ec45636355d35fb9022b64e4bdd4a91" version = "v0.1.0" +[[projects]] + digest = "1:ee0798f25b0eb001c3cd39540722e91a7752758f3d9b52c604b7e2f1e11aec4a" + name = "contrib.go.opencensus.io/exporter/stackdriver" + packages = [ + ".", + "monitoredresource", + ] + pruneopts = "UT" + revision = "59d068f8d8ff5b653916aa30cdc4e13c7f15d56e" + [[projects]] branch = "master" digest = "1:6da51e5ec493ad2b44cb04129e2d0a068c8fb9bd6cb5739d199573558696bb94" @@ -37,7 +51,7 @@ revision = "d6e3b3328b783f23731bc4d058875b0371ff8109" [[projects]] - digest = "1:1fe87891e29a291377b0b2224b99fd857553dff7dce8a6ffb5fda003ce52a8b0" + digest = "1:dcf25ae752511462b05f08dc4be431e0c3231941071669c9230939a3600aa2b9" name = "github.com/Azure/go-autorest" packages = [ "autorest", @@ -45,11 +59,11 @@ "autorest/azure", "autorest/date", "logger", - "version", + "tracing", ] pruneopts = "UT" - revision = "4b7f49dc5db2e1e6d528524d269b4181981a7ebf" - version = "v11.1.1" + revision = "3492b2aff5036c67228ab3c7dba3577c871db200" + version = "v13.3.0" [[projects]] digest = "1:9f3b30d9f8e0d7040f729b82dcbc8f0dead820a133b3147ce355fc451f32d761" @@ -60,12 +74,12 @@ version = "v0.3.1" [[projects]] - branch = "master" - digest = "1:9831b48eaba66c6eee6b8bc698d5a669088313cfee3c94435056e3522e4a53fb" + digest = "1:786383c1c859413b15a854ff84722a9526fe9979e39cb712b3d2d932a246f687" name = "github.com/MakeNowJust/heredoc" packages = ["."] pruneopts = "UT" - revision = "e9091a26100e9cfb2b6a8f470085bfa541931a91" + revision = "efb6ca8de9d5385c3963279701760e37637cf238" + version = "v2.0.1" [[projects]] digest = "1:3b10c6fd33854dc41de2cf78b7bae105da94c2789b6fa5b9ac9e593ea43484ac" @@ -76,36 +90,63 @@ version = "v1.1.0" [[projects]] - digest = "1:55388fd080150b9a072912f97b1f5891eb0b50df43401f8b75fb4273d3fec9fc" - name = "github.com/Masterminds/semver" + digest = "1:181a6a5506bd83827d826df5b3272040e92c487516b2fc8edd066be941d68d9e" + name = "github.com/Masterminds/sprig" packages = ["."] pruneopts = "UT" - revision = "c7af12943936e8c39859482e61f0574c2fd7fc75" - version = "v1.4.2" + revision = "0e09f04f09aede2cc36cbecad7ec27b0055303e0" + version = "v3.0.0" [[projects]] - digest = "1:d8cbb69f08bd6cdf2e5d36b4784139920121943e8a3e5661431052f8e785f58b" - name = "github.com/Masterminds/sprig" - packages = ["."] + digest = "1:d5e752c67b445baa5b6cb6f8aa706775c2aa8e41aca95a0c651520ff2c80361a" + name = "github.com/Microsoft/go-winio" + packages = [ + ".", + "pkg/guid", + ] pruneopts = "UT" - revision = "b1fe2752acccf8c3d7f8a1e7c75c7ae7d83a1975" - version = "v2.18.0" + revision = "6c72808b55902eae4c5943626030429ff20f3b63" + version = "v0.4.14" + +[[projects]] + digest = "1:6a16b820c16f0587d63a3c462a9d787106f966adae5056aa430ebca18c7fba46" + name = "github.com/Microsoft/hcsshim" + packages = [ + ".", + "internal/guestrequest", + "internal/guid", + "internal/hcs", + "internal/hcserror", + "internal/hns", + "internal/interop", + "internal/logfields", + "internal/longpath", + "internal/mergemaps", + "internal/safefile", + "internal/schema1", + "internal/schema2", + "internal/timeout", + "internal/wclayer", + ] + pruneopts = "UT" + revision = "f92b8fb9c92e17da496af5a69e3ee13fbe9916e1" + version = "v0.8.6" [[projects]] branch = "master" - digest = "1:3f44afe45c6c5038d9d0bec55b8b9e598b3dba2547d99ba353d7c3bb485d01fa" + digest = "1:95d3d366dba111f0c7b951b0a3e569eaad9133e9c7e42d4072cf7eed17c33b87" name = "github.com/Netflix/go-expect" packages = ["."] pruneopts = "UT" - revision = "9d1f4485533ba0665fa4ca2ef6f1210198f7eaae" + revision = "0e00d916866778d0c56bb09a9a7f2b861196221b" [[projects]] - digest = "1:d1665c44bd5db19aaee18d1b6233c99b0b9a986e8bccb24ef54747547a48027f" + digest = "1:a2682518d905d662d984ef9959984ef87cecb777d379bfa9d9fe40e78069b3e4" name = "github.com/PuerkitoBio/purell" packages = ["."] pruneopts = "UT" - revision = "0bcb03f4b4d0a9428594752bd2a3b9aa0a9d4bd4" - version = "v1.1.0" + revision = "44968752391892e1b0d0b821ee79e9a85fa13049" + version = "v1.1.1" [[projects]] branch = "master" @@ -116,20 +157,12 @@ revision = "de5bf2ad457846296e2031421a34e2568e304e35" [[projects]] - digest = "1:87c2e02fb01c27060ccc5ba7c5a407cc91147726f8f40b70cceeedbc52b1f3a8" - name = "github.com/Sirupsen/logrus" - packages = ["."] - pruneopts = "UT" - revision = "e1e72e9de974bd926e5c56f83753fba2df402ce5" - version = "v1.3.0" - -[[projects]] - branch = "master" - digest = "1:ef5b0622d834c139454148b8fd0c92bb314828900532b267ae62da9fec109866" + digest = "1:6e5c185e8d31660ed469b1da14650753ec228c6ef4e2c45c075bf48b927c6520" name = "github.com/armon/go-metrics" packages = ["."] pruneopts = "UT" - revision = "f0300d1749da6fa982027e449ec0c7a145510c3c" + revision = "13f9d8e9b41c66738153b7582f1f62add8e407c8" + version = "v0.3.0" [[projects]] digest = "1:320e7ead93de9fd2b0e59b50fd92a4d50c1f8ab455d96bc2eb083267453a9709" @@ -140,15 +173,15 @@ version = "v9" [[projects]] - digest = "1:1c9dffe45896d21dc8e183fdc3cdb405249e6c7dd3d00792e534af3597d5e4fc" + digest = "1:6c7e9c6eaab0e5579b85151932e4e11347cd2869a97b2a098b80a872abe561d6" name = "github.com/avast/retry-go" packages = ["."] pruneopts = "UT" - revision = "08d411bf8302219fe47ca04dbdf9de892010c5e5" - version = "v2.2.0" + revision = "a322e24d96313ab405dec28ad5711f036c6d25a3" + version = "v2.4.2" [[projects]] - digest = "1:1273bcc48fea1f2b6588e4b42921a644bbe8820d2109dd41a53e996f9fb44143" + digest = "1:aecf305e166f7c5fb4a1b8276a51dc81bbd169db2dde06c341bac6702f5b9137" name = "github.com/aws/aws-sdk-go" packages = [ "aws", @@ -171,6 +204,7 @@ "aws/signer/v4", "internal/ini", "internal/sdkio", + "internal/sdkmath", "internal/sdkrand", "internal/sdkuri", "internal/shareddefaults", @@ -186,23 +220,26 @@ "service/ec2", "service/lambda", "service/sts", + "service/sts/stsiface", ] pruneopts = "UT" - revision = "dcb92372bfaa5a5e0df8b4f981ee04574970f9c6" - version = "v1.20.6" + revision = "da1bcf347b8a39f8222e2799f772112761b6f25c" + version = "v1.25.42" [[projects]] - branch = "master" digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" name = "github.com/beorn7/perks" packages = ["quantile"] pruneopts = "UT" - revision = "3a771d992973f24aa725d07868b467d1ddfceafb" + revision = "37c8de3658fcb183f997c4e13e8337516ab753e6" + version = "v1.0.1" [[projects]] - digest = "1:530196e273d778fb94ad0481a801ae1d9a79f2ff40b8040413c33a1fb46505a1" + digest = "1:9482d871d30b7fdffb90c6d2734e4d606febedac2f79db26e14c751be3c33705" name = "github.com/census-instrumentation/opencensus-proto" packages = [ + "gen-go/agent/common/v1", + "gen-go/metrics/v1", "gen-go/resource/v1", "gen-go/trace/v1", ] @@ -211,25 +248,52 @@ version = "v0.2.1" [[projects]] - branch = "master" - digest = "1:95e08278c876d185ba67533f045e9e63b3c9d02cbd60beb0f4dbaa2344a13ac2" - name = "github.com/chai2010/gettext-go" + digest = "1:c87e43b1c40d507c0f72e8f60a36e57f6bcbf22d96a614dc1687796caa9c4cb6" + name = "github.com/containerd/containerd" packages = [ - "gettext", - "gettext/mo", - "gettext/plural", - "gettext/po", + "archive/compression", + "content", + "content/local", + "errdefs", + "filters", + "images", + "labels", + "log", + "platforms", + "reference", + "remotes", + "remotes/docker", + "remotes/docker/schema1", + "sys", + "version", ] pruneopts = "UT" - revision = "bf70f2a70fb1b1f36d90d671a72795984eab0fcb" + revision = "c7a4f874b3267c499484aae602d1257b12d69e40" + version = "v1.3.1" [[projects]] - digest = "1:7cb4fdca4c251b3ef8027c90ea35f70c7b661a593b9eeae34753c65499098bb1" + branch = "master" + digest = "1:e48c63e818c67fbf3d7afe20bba33134ab1a5bf384847385384fd027652a5a96" + name = "github.com/containerd/continuity" + packages = ["pathdriver"] + pruneopts = "UT" + revision = "f65d91d395ebd5507b567968624a4bbdbb9e8819" + +[[projects]] + digest = "1:20bfde0f85a3d7cbf9a1222656c0075268f21e90d35a8caa773d3351a260011f" name = "github.com/cpuguy83/go-md2man" packages = ["md2man"] pruneopts = "UT" - revision = "20f5889cbdc3c73dbd2862796665e7c465ade7d1" - version = "v1.0.8" + revision = "f79a8a8ca69da163eee19ab442bedad7a35bba5a" + version = "v2.0.0" + +[[projects]] + digest = "1:e29335d5a78621ed7a539ed75e10785c3705bb67d916e48b03b1cdf9b727508d" + name = "github.com/creack/pty" + packages = ["."] + pruneopts = "UT" + revision = "3a6a957789163cacdfe0e291617a1c8e80612c11" + version = "v1.1.9" [[projects]] digest = "1:ec66ad050342a3573ed2f5a4337d51b4c6d5d2a717cc6c9ecf86b081235a5759" @@ -240,12 +304,27 @@ version = "v0.2.2" [[projects]] - digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39" + digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec" name = "github.com/davecgh/go-spew" packages = ["spew"] pruneopts = "UT" - revision = "346938d642f2ec3594ed81d874461961cd0faa76" - version = "v1.1.0" + revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" + version = "v1.1.1" + +[[projects]] + digest = "1:496d98cc26b347aac57b58741901beaaf0ef1ca3ddfbf752b964b8937ab47a8d" + name = "github.com/deislabs/oras" + packages = [ + "pkg/artifact", + "pkg/auth", + "pkg/auth/docker", + "pkg/content", + "pkg/context", + "pkg/oras", + ] + pruneopts = "UT" + revision = "5229f7ad65cfe672c311283a26bd295247100d2e" + version = "v0.8.0" [[projects]] digest = "1:76dc72490af7174349349838f2fe118996381b31ea83243812a97e5a0fd5ed55" @@ -256,26 +335,110 @@ version = "v3.2.0" [[projects]] - digest = "1:4ddc17aeaa82cb18c5f0a25d7c253a10682f518f4b2558a82869506eec223d76" + digest = "1:92ebc9c068ab8e3fff03a58694ee33830964f6febd0130069aadce328802de14" + name = "github.com/docker/cli" + packages = [ + "cli/config", + "cli/config/configfile", + "cli/config/credentials", + "cli/config/types", + ] + pruneopts = "UT" + revision = "99c5edceb48d64c1aa5d09b8c9c499d431d98bb9" + version = "v19.03.5" + +[[projects]] + digest = "1:c22e25eae6d474723f1e6ed273ad5532429165f933165c77fe687f8d11087137" name = "github.com/docker/distribution" packages = [ + ".", "digestset", + "metrics", "reference", + "registry/api/errcode", + "registry/api/v2", + "registry/client", + "registry/client/auth", + "registry/client/auth/challenge", + "registry/client/transport", + "registry/storage/cache", + "registry/storage/cache/memory", ] pruneopts = "UT" - revision = "40b7b5830a2337bb07627617740c0e39eb92800c" - version = "v2.7.0" + revision = "2461543d988979529609e8cb6fca9ca190dc48da" + version = "v2.7.1" [[projects]] - digest = "1:53e99d883df3e940f5f0223795f300eb32b8c044f226132bfc0e74930f24ea4b" + digest = "1:e0dbb75e2c076bb9fd7d4caaff0acad6a046720f6ffdb7d4569b2590e9a5de55" name = "github.com/docker/docker" packages = [ + "api/types", + "api/types/blkiodev", + "api/types/container", + "api/types/filters", + "api/types/mount", + "api/types/network", + "api/types/registry", + "api/types/strslice", + "api/types/swarm", + "api/types/swarm/runtime", + "api/types/versions", + "errdefs", + "pkg/homedir", + "pkg/idtools", + "pkg/ioutils", + "pkg/jsonmessage", + "pkg/longpath", + "pkg/mount", + "pkg/stringid", + "pkg/system", + "pkg/tarsum", "pkg/term", "pkg/term/windows", + "registry", + "registry/resumable", ] pruneopts = "UT" - revision = "092cba3727bb9b4a2f0e922cd6c0f93ea270e363" - version = "v1.13.1" + revision = "be7ac8be2ae072032a4005e8f232be3fc57e4127" + +[[projects]] + digest = "1:9f3f49b4e32d3da2dd6ed07cc568627b53cc80205c0dcf69f4091f027416cb60" + name = "github.com/docker/docker-credential-helpers" + packages = [ + "client", + "credentials", + ] + pruneopts = "UT" + revision = "54f0238b6bf101fc3ad3b34114cb5520beb562f5" + version = "v0.6.3" + +[[projects]] + digest = "1:811c86996b1ca46729bad2724d4499014c4b9effd05ef8c71b852aad90deb0ce" + name = "github.com/docker/go-connections" + packages = [ + "nat", + "sockets", + "tlsconfig", + ] + pruneopts = "UT" + revision = "7395e3f8aa162843a74ed6d48e79627d9792ac55" + version = "v0.4.0" + +[[projects]] + digest = "1:9f1c706b956b58bbe2a420082dd47df25329a082ae873fdd43c175b09887cea8" + name = "github.com/docker/go-metrics" + packages = ["."] + pruneopts = "UT" + revision = "b619b3592b65de4f087d9f16863a7e6ff905973c" + version = "v0.0.1" + +[[projects]] + digest = "1:e95ef557dc3120984bb66b385ae01b4bb8ff56bcde28e7b0d1beed0cccc4d69f" + name = "github.com/docker/go-units" + packages = ["."] + pruneopts = "UT" + revision = "519db1ee28dcc9fd2474ae59fca29a810482bfb1" + version = "v0.4.0" [[projects]] branch = "master" @@ -288,6 +451,17 @@ pruneopts = "UT" revision = "6480d4af844c189cf5dd913db24ddd339d3a4f85" +[[projects]] + digest = "1:e15b0065da1011473634ffa0dda17731ea1d5f6fb8bb87905216d95fa29eaec0" + name = "github.com/emicklei/go-restful" + packages = [ + ".", + "log", + ] + pruneopts = "UT" + revision = "99f05a26a0a1c71e664ebe6a76d29b2c80333056" + version = "v2.11.1" + [[projects]] digest = "1:b498b36dbb2b306d1c5205ee5236c9e60352be8f9eea9bf08186723a9f75b4f3" name = "github.com/emirpasic/gods" @@ -347,20 +521,20 @@ version = "v0.9.1" [[projects]] - digest = "1:dfe5159383dfcd370555c35374ac99022906f987b55cc65a830fb9ced970b4b1" + digest = "1:743f8008a7fed04ef0d52261aef346766bbd5b3e360b90296d85289f8ef5c2e2" name = "github.com/envoyproxy/protoc-gen-validate" packages = ["validate"] pruneopts = "UT" - revision = "930a67cf7ba41b9d9436ad7a1be70a5d5ff6e1fc" - version = "v0.0.6" + revision = "9eff07ddfcb4001aa1aab280648153f46e1a8ddc" + version = "v0.1.0" [[projects]] - digest = "1:f1f2bd73c025d24c3b93abf6364bccb802cf2fdedaa44360804c67800e8fab8d" + digest = "1:b48d19e79fa607e9e3715ff9a73cdd3777a9cac254b50b9af721466f687e850d" name = "github.com/evanphx/json-patch" packages = ["."] pruneopts = "UT" - revision = "72bf35d0ff611848c1dc9df0f976c81192392fa5" - version = "v4.1.0" + revision = "afac545df32f2287a079e2dfb7ba2745a643747e" + version = "v3.0.0" [[projects]] branch = "master" @@ -371,20 +545,20 @@ revision = "d6023ce2651d8eafb5c75bb0c7167536102ec9f5" [[projects]] - digest = "1:bbc4aacabe6880bdbce849c64cb061b7eddf39f132af4ea2853ddd32f85fbec3" - name = "github.com/fatih/camelcase" + digest = "1:938a2672d6ebbb7f7bc63eee3e4b9464c16ffcf77ec8913d3edbf32b4e3984dd" + name = "github.com/fatih/color" packages = ["."] pruneopts = "UT" - revision = "44e46d280b43ec1531bb25252440e34f1b800b65" - version = "v1.0.0" + revision = "570b54cabe6b8eb0bc2dfce68d964677d63b5260" + version = "v1.5.0" [[projects]] - digest = "1:58981659bb698cb749d5bf7316e71e2768ffed5fd35f6ba3b182dfa1fed13420" + digest = "1:a7dfc4c0fd180da3f69dae1b85d76f4ae3158000922d43caedd8ed61271a3355" name = "github.com/fgrosse/zaptest" packages = ["."] pruneopts = "UT" - revision = "88dc3e74eadbccae7fe0cce56e0627cb7bc35b97" - version = "v1.0.0" + revision = "c15df62b6d517f1bc693998900e3e2cd28319b7f" + version = "v1.1.0" [[projects]] digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" @@ -403,51 +577,50 @@ version = "v1.0.0" [[projects]] - digest = "1:50d6bc4aa3e70803230bb98a4b0e0f1331fefc2eb324e087adf7e986b8da082e" + digest = "1:ec1763a0b23c3c610dc2a0310c9afd01513c9b95091c05a9207718a61181c276" name = "github.com/go-openapi/analysis" packages = [ ".", "internal", ] pruneopts = "UT" - revision = "7c1bef8f6d9fa6148ce0d8a0ebf5339a084a6639" - version = "0.16.0" + revision = "1024f3482ddc2c381cc918eb9eca596d51a70272" + version = "v0.19.6" [[projects]] - branch = "master" - digest = "1:dd9d7a334e7d246a8501ac0cf5d408024c91ff8b8308930cd98916629970da97" + digest = "1:3bca1e4623bc7e1f9849a14fe730c093953727991f0592be3dad0168cb67758e" name = "github.com/go-openapi/errors" packages = ["."] pruneopts = "UT" - revision = "9b273e805998abc751853b4e1574d66e5df888b4" + revision = "0b2a0a1f89aa2eec2d13e03cd80ab0fdaf01f8ce" + version = "v0.19.2" [[projects]] - digest = "1:2997679181d901ac8aaf4330d11138ecf3974c6d3334995ff36f20cbd597daf8" + digest = "1:ed15647db08b6d63666bf9755d337725960c302bbfa5e23754b4b915a4797e42" name = "github.com/go-openapi/jsonpointer" packages = ["."] pruneopts = "UT" - revision = "3a0015ad55fa9873f41605d3e8f28cd279c32ab2" - version = "0.16.0" + revision = "ed123515f087412cd7ef02e49b0b0a5e6a79a360" + version = "v0.19.3" [[projects]] - digest = "1:1ae3f233d75a731b164ca9feafd8ed646cbedf1784095876ed6988ce8aa88b1f" + digest = "1:451fe53c19443c6941be5d4295edc973a3eb16baccb940efee94284024be03b0" name = "github.com/go-openapi/jsonreference" packages = ["."] pruneopts = "UT" - revision = "3fb327e6747da3043567ee86abd02bb6376b6be2" - version = "0.16.0" + revision = "82f31475a8f7a12bc26962f6e26ceade8ea6f66a" + version = "v0.19.3" [[projects]] - branch = "master" - digest = "1:cdace6771905e7cd0656263b5132f012a668c5bf937a6bdabf4c37bc8ed3addf" + digest = "1:9dbde8fb0423931f1c23610428cbdd351a0cd066891b4d43c620e0669ca2c3a9" name = "github.com/go-openapi/loads" packages = ["."] pruneopts = "UT" - revision = "8548893a17237be4a5b2f74773f23002f4179bbe" + revision = "bda4742c39071f7804171d847fb6e9bca84f9f57" + version = "v0.19.4" [[projects]] - branch = "master" - digest = "1:89a9ae5cca29a7f95b0ceb477a6dc3d5d7790c00f602febdca47ec192eab4f82" + digest = "1:b9869f5f70dbf07b5cc29b43565b601c21daeb3a7a31275ed2074b6c8bfd36ad" name = "github.com/go-openapi/runtime" packages = [ ".", @@ -459,47 +632,56 @@ "security", ] pruneopts = "UT" - revision = "7a84b65170621fda58a6330a8896ab97852c8984" + revision = "fe6d8ccde74ed2051547fa7590a3932b88a53875" + version = "v0.19.8" [[projects]] - digest = "1:b1f97d0d316f90c2059f7bfee14855c314d65834a3b93f02856e01c1fb8fbebe" + digest = "1:55d1c09fc8b3320b6842565249a9e4d0f363bead6f9b8be05c3b47f2c4264eda" name = "github.com/go-openapi/spec" packages = ["."] pruneopts = "UT" - revision = "bdfd7e07daecc404d77868a88b2364d0aed0ee5a" - version = "v0.19.2" + revision = "8557d72e4f077c2dbe1e48df09e596b6fb9b7991" + version = "v0.19.4" [[projects]] - digest = "1:c19e41854708ff52816cff12f30d454135f350a1e4fe6ab62a8be8df75458eb0" + digest = "1:787b399bfeddd801aca6144bd9928f4fe1d40eadcb09c59fcbd421cc528ea11c" name = "github.com/go-openapi/strfmt" packages = ["."] pruneopts = "UT" - revision = "913ee058e387ac83a67e2d9f13acecdcd5769fc6" - version = "0.16.0" + revision = "6faa644e1cdafc07f7b38eb06c1af5f92128f289" + version = "v0.19.3" [[projects]] - branch = "master" - digest = "1:2de91ae845491f7158c1644a1183d2bbcc5a7bd668768b60a91519f848603dad" + digest = "1:43d0f99f53acce97119181dcd592321084690c2d462c57680ccb4472ae084949" name = "github.com/go-openapi/swag" packages = ["."] pruneopts = "UT" - revision = "de649ffb9e02183a414820c5b1b4582f7b009792" + revision = "c3d0f7896d589f3babb99eea24bbc7de98108e72" + version = "v0.19.5" [[projects]] - digest = "1:9d2bd059a75e4ac3983cc93fe013dbc7f789fccb996171094279458b15329842" + digest = "1:313e98ecd90b82d00c6b480c7458602f2c669b93c396772680fd3a9bb9ad13c0" name = "github.com/go-openapi/validate" packages = ["."] pruneopts = "UT" - revision = "6405b9095e4c96aabb45856da08a9323d50d9336" - version = "v0.19.2" + revision = "08232b6614a50c4f62d1efa77e966421d327d3d3" + version = "v0.19.5" + +[[projects]] + digest = "1:586ea76dbd0374d6fb649a91d70d652b7fe0ccffb8910a77468e7702e7901f3d" + name = "github.com/go-stack/stack" + packages = ["."] + pruneopts = "UT" + revision = "2fee6af1a9795aafbe0253a0cfbdf668e1fb8a9a" + version = "v1.8.0" [[projects]] digest = "1:affedbb2920983d4112237e972117242a352335e7b7a32524a5e74180ddb1e2d" name = "github.com/go-swagger/go-swagger" packages = ["examples/2.0/petstore/server/api"] pruneopts = "UT" - revision = "51061fa3be377b2ef34c70d14d2058b467009eb4" - version = "v0.19.0" + revision = "078d718e058c4d2094aacefd93cc3a8d97af7813" + version = "v0.21.0" [[projects]] digest = "1:9ae31ce33b4bab257668963e844d98765b44160be4ee98cafc44637a213e530d" @@ -519,18 +701,18 @@ version = "v0.2.3" [[projects]] - digest = "1:d661a50b937259fd2a6324af7ee4cb62fa506bd9b82cd2fd96e23122af7c006f" + digest = "1:926e8bd8e7a8c3bdb9c9a211f5f4c8fdd2c6fa00c2cea2cba58786af544bd925" name = "github.com/gogo/googleapis" packages = [ "google/api", "google/rpc", ] pruneopts = "UT" - revision = "08a7655d27152912db7aaf4f983275eaf8d128ef" - version = "v1.0.0" + revision = "0cd1026ed3d2e6809dc241eff2e2163ec715d38e" + version = "v1.3.0" [[projects]] - digest = "1:92af5d1e4774a8cceb6dfae9d31e3a2879cd44a84eb63c0bd571d9866c82e0f4" + digest = "1:b314e9a6fe7b25b9a8fb7a08ae3de4c0541b23c48f65450975cf9633c4c0bc94" name = "github.com/gogo/protobuf" packages = [ "gogoproto", @@ -542,30 +724,30 @@ "types", ] pruneopts = "UT" - revision = "0ca988a254f991240804bf9821f3450d87ccbb1b" - version = "v1.3.0" + revision = "5628607bb4c51c3157aacc3a50f0ab707582b805" + version = "v1.3.1" [[projects]] branch = "master" - digest = "1:3fb07f8e222402962fa190eb060608b34eddfb64562a18e2167df2de0ece85d8" + digest = "1:b7cb6054d3dff43b38ad2e92492f220f57ae6087ee797dca298139776749ace8" name = "github.com/golang/groupcache" packages = ["lru"] pruneopts = "UT" - revision = "6f2cf27854a4a29e3811b0371547be335d411b8b" + revision = "611e8accdfc92c4187d399e95ce826046d4c8d73" [[projects]] - digest = "1:a507e8646bf3775af6f7e7b2a62a5e67d1c6a8f00754f87e66b96181b7f3d747" + digest = "1:f92fd6e98da2322ddd7f60b9fd647b11bb67c6ab01dfdfb59f8f5ded2e7522d6" name = "github.com/golang/mock" packages = [ "gomock", "mockgen/model", ] pruneopts = "UT" - revision = "51421b967af1f557f93a59e0057aaf15ca02e29c" - version = "v1.2.0" + revision = "9fa652df1129bef0e734c9cf9bf6dbae9ef3b9fa" + version = "1.3.1" [[projects]] - digest = "1:4d57cfecf525530b26c012f5444aa6c892317bb8622c5c684b6becfa56bdb61f" + digest = "1:4b92455ec3207af85a162816340d0c9b5ca2328b95ae14e7cf060d340ff41bc9" name = "github.com/golang/protobuf" packages = [ "jsonpb", @@ -585,24 +767,24 @@ "ptypes/wrappers", ] pruneopts = "UT" - revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30" - version = "v1.3.1" + revision = "6c65a5562fc06764971b7c5d05c76c75e84bdbf7" + version = "v1.3.2" [[projects]] - branch = "master" - digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009" + digest = "1:e4f5819333ac698d294fe04dbf640f84719658d5c7ce195b10060cc37292ce79" name = "github.com/golang/snappy" packages = ["."] pruneopts = "UT" - revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" + revision = "2a8bb927dd31d8daada140a5d09578521ce5c36a" + version = "v0.0.1" [[projects]] - branch = "master" - digest = "1:9887333bbef17574b1db5f9893ea137ac44107235d624408a3ac9e0b98fbb2cb" + digest = "1:0bfbe13936953a98ae3cfe8ed6670d396ad81edf069a806d2f6515d7bb6950df" name = "github.com/google/btree" packages = ["."] pruneopts = "UT" - revision = "e89373fe6b4a7413d7acd6da1725b83ef713e6e4" + revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306" + version = "v1.0.0" [[projects]] digest = "1:bf40199583e5143d1472fc34d10d6f4b69d97572142acf343b3e43136da40823" @@ -618,19 +800,19 @@ revision = "6f77996f0c42f7b84e5a2b252227263f93432e9b" [[projects]] - digest = "1:7915c656a10819b240db94ffd6afc6a621af4687db735341d9919668750485ec" + digest = "1:10aa62acd56f635de190110a836aa261b3774e697b2b6a7af27d8263cf856d47" name = "github.com/google/go-containerregistry" packages = ["pkg/name"] pruneopts = "UT" - revision = "abf9ef06abd9f532944e28e8942644ea4b710a40" + revision = "b02d448a3705facf11018efff34f1d2830be5724" [[projects]] - digest = "1:34bd52916ea0a9e4d95d34dab5bc4f125a7ee7b1e11b1a531d2ea43f41b4f4e8" + digest = "1:91099c6f78b1e7bdf9ed06eb4cb7f017174293a3689d76b995a06f4c8d64a7f0" name = "github.com/google/go-github" packages = ["github"] pruneopts = "UT" - revision = "35781f7f4db7b3d7fc3359527472838da65023c6" - version = "v19.1.0" + revision = "9686ff0746200cf521ce225525b421e13b4eac1a" + version = "v28.1.1" [[projects]] digest = "1:a63cff6b5d8b95638bfe300385d93b2a6d9d687734b863da8e09dc834510a690" @@ -641,34 +823,31 @@ version = "v1.0.0" [[projects]] - branch = "master" - digest = "1:3ee90c0d94da31b442dde97c99635aaafec68d0b8a3c12ee2075c6bdabeec6bb" + digest = "1:a6181aca1fd5e27103f9a920876f29ac72854df7345a39f3b01e61c8c94cc8af" name = "github.com/google/gofuzz" packages = ["."] pruneopts = "UT" - revision = "24818f796faf91cd76ec7bddd72458fbced7a6c1" + revision = "f140a6486e521aad38f5917de355cbf147cc0496" + version = "v1.0.0" [[projects]] - digest = "1:236d7e1bdb50d8f68559af37dbcf9d142d56b431c9b2176d41e2a009b664cda8" + digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b" name = "github.com/google/uuid" packages = ["."] pruneopts = "UT" - revision = "9b3b1e0f5f99ae461456d768e7d301a7acdaa2d8" - version = "v1.1.0" + revision = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4" + version = "v1.1.1" [[projects]] - digest = "1:4f880e8e7ff8803aab4bcf2c479eb766435f7decaa1edf080d8f2bf56668de1d" + digest = "1:766102087520f9d54f2acc72bd6637045900ac735b4a419b128d216f0c5c4876" name = "github.com/googleapis/gax-go" - packages = [ - ".", - "v2", - ] + packages = ["v2"] pruneopts = "UT" revision = "bd5b16380fd03dc758d11cef74ba2e3bc8b0e8c2" version = "v2.0.5" [[projects]] - digest = "1:65c4414eeb350c47b8de71110150d0ea8a281835b1f386eacaa3ad7325929c21" + digest = "1:ca4524b4855ded427c7003ec903a5c854f37e7b1e8e2a93277243462c5b753a8" name = "github.com/googleapis/gnostic" packages = [ "OpenAPIv2", @@ -676,20 +855,19 @@ "extensions", ] pruneopts = "UT" - revision = "7c663266750e7d82587642f65e60bc4083f1f84e" - version = "v0.2.0" + revision = "ab0dd09aa10e2952b28e12ecd35681b20463ebab" + version = "v0.3.1" [[projects]] - digest = "1:f91df401afec7f89e6b8932337a63fc4807e61bdfee71b924acffe1d4b1bce97" + digest = "1:d8b04ac65ed598214a3fa5069577aedb5ff6a92cbc3d6650bd14e42e13e685ba" name = "github.com/goph/emperror" packages = ["."] pruneopts = "UT" - revision = "ae59d9fdc3f0c4814bc5fac2d4a68441dcff5a17" - version = "v0.17.1" + revision = "9727b49dc9d66225368645198434124e02b7e355" + version = "v0.17.2" [[projects]] - branch = "master" - digest = "1:d47549022c929925679aec031329f59f250d704f69ee44a194998cdb8d873393" + digest = "1:a10e92469ba0d1776fbceb287feefe5f69d3c579254ca4e14863f5f8c2712870" name = "github.com/gophercloud/gophercloud" packages = [ ".", @@ -701,37 +879,42 @@ "pagination", ] pruneopts = "UT" - revision = "f27ceddc323ff01fdd909ac8377fb06b12db7f4f" + revision = "a8bdb516e71d7c586306501b30b80f06f53c013e" + version = "v0.6.0" [[projects]] - digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1" - name = "github.com/gorilla/context" + digest = "1:cbec35fe4d5a4fba369a656a8cd65e244ea2c743007d8f6c1ccb132acf9d1296" + name = "github.com/gorilla/mux" packages = ["."] pruneopts = "UT" - revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42" - version = "v1.1.1" + revision = "00bdffe0f3c77e27d2cf6f5c70232a2d3e4d9c15" + version = "v1.7.3" [[projects]] - digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f" - name = "github.com/gorilla/mux" - packages = ["."] + digest = "1:3e844b8477e4062d4ce0df38180cbb20c98a11080d320d5b95074e8c582b6c55" + name = "github.com/gosuri/uitable" + packages = [ + ".", + "util/strutil", + "util/wordwrap", + ] pruneopts = "UT" - revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf" - version = "v1.6.2" + revision = "764536226c71f9c74a2445394091c2a9ac440a1b" + version = "v0.0.4" [[projects]] branch = "master" - digest = "1:86c1210529e69d69860f2bb3ee9ccce0b595aa3f9165e7dd1388e5c612915888" + digest = "1:5fc0e23b254a1bd7d8d2d42fa093ba33471d08f52fe04afd3713adabb5888dc3" name = "github.com/gregjones/httpcache" packages = [ ".", "diskcache", ] pruneopts = "UT" - revision = "9cad4c3443a7200dd6400aef47183728de563a38" + revision = "901d90724c7919163f472a9812253fb26761123d" [[projects]] - digest = "1:6d9ec638c0f60d01a25e43940f20dff30cf8b468371ea4df54cbc5b73e07e223" + digest = "1:665e50391b2ba46481d1124efe73f46816d6f902453be1bbba87afee5201e6af" name = "github.com/grpc-ecosystem/go-grpc-middleware" packages = [ ".", @@ -742,103 +925,94 @@ "tags/zap", ] pruneopts = "UT" - revision = "c250d6563d4d4c20252cd865923440e829844f4e" - version = "v1.0.0" - -[[projects]] - digest = "1:9b7a07ac7577787a8ecc1334cb9f34df1c76ed82a917d556c5713d3ab84fbc43" - name = "github.com/grpc-ecosystem/go-grpc-prometheus" - packages = ["."] - pruneopts = "UT" - revision = "c225b8c3b01faf2899099b768856a9e916e5087b" - version = "v1.2.0" + revision = "dd15ed025b6054e5253963e355991f3070d4e593" + version = "v1.1.0" [[projects]] - digest = "1:8b20ed6a6df0628913a69e4c1709537b2e26c7be4aca856bf52b431cf1ce6d90" + digest = "1:b8e677e73a5d89f650ef563c2b781175c5a1fd0d3380e316280d74e4a380b1a6" name = "github.com/hashicorp/consul" packages = ["api"] pruneopts = "UT" - revision = "a82e6a7fd33a0d05b9b871bcaf1d7595c9b8dedc" - version = "v1.5.2" + revision = "1200f25eabc75368484a78698e75f1e61b6ed010" + version = "v1.6.2" [[projects]] - branch = "master" - digest = "1:d1971637b21871ec2033a44ca87c99c5608a7340cb34ec75fab8d2ab503276c9" + digest = "1:0ade334594e69404d80d9d323445d2297ff8161637f9b2d347cc6973d2d6f05b" name = "github.com/hashicorp/errwrap" packages = ["."] pruneopts = "UT" - revision = "d6c0cd88035724dd42e0f335ae30161c20575ecc" + revision = "8a6fb523712970c966eefc6b39ed2c5e74880354" + version = "v1.0.0" [[projects]] - branch = "master" - digest = "1:77cb3be9b21ba7f1a4701e870c84ea8b66e7d74c7c8951c58155fdadae9414ec" + digest = "1:af105c7c5dc0b4ae41991f122cae860b9600f7d226072c2a83127048c991660c" name = "github.com/hashicorp/go-cleanhttp" packages = ["."] pruneopts = "UT" - revision = "d5fe4b57a186c716b0e00b8c301cbd9b4182694d" + revision = "eda1e5db218aad1db63ca4642c8906b26bcf2744" + version = "v0.5.1" [[projects]] - digest = "1:2be5a35f0c5b35162c41bb24971e5dcf6ce825403296ee435429cdcc4e1e847e" + digest = "1:6e9806a06d00f4d1f90806d7b5cfb11e35dca76503390ca6e704b05ea7051bff" name = "github.com/hashicorp/go-immutable-radix" packages = ["."] pruneopts = "UT" - revision = "27df80928bb34bb1b0d6d0e01b9e679902e7a6b5" - version = "v1.0.0" + revision = "7dd1121b595e4e1bd6dd5caa78e0f5c454740379" + version = "v1.1.0" [[projects]] - branch = "master" - digest = "1:46fb6a9f1b9667f32ac93e08b1da118b2c666991424ea12e848b05d4fe5155ef" + digest = "1:f668349b83f7d779567c880550534addeca7ebadfdcf44b0b9c39be61864b4b7" name = "github.com/hashicorp/go-multierror" packages = ["."] pruneopts = "UT" - revision = "3d5d8f294aa03d8e98859feac328afbdf1ae0703" + revision = "886a7fbe3eb1c874d46f623bfa70af45f425b3d1" + version = "v1.0.0" [[projects]] - branch = "master" - digest = "1:183f00c472fb9b2446659618eebf4899872fa267b92f926539411abdc8b941df" + digest = "1:79b0e82add95217a03c78dd4576d9296fb229c0603af408fe7eebe5f14ad3094" name = "github.com/hashicorp/go-retryablehttp" packages = ["."] pruneopts = "UT" - revision = "e651d75abec6fbd4f2c09508f72ae7af8a8b7171" + revision = "eaff869a704e190d92996f23c23a4037cf2b0770" + version = "v0.6.4" [[projects]] - branch = "master" - digest = "1:45aad874d3c7d5e8610427c81870fb54970b981692930ec2a319ce4cb89d7a00" + digest = "1:7b893c9e1181e224506c523777dea0d16f4bd20a7627b100cc800e14229f405c" name = "github.com/hashicorp/go-rootcerts" packages = ["."] pruneopts = "UT" - revision = "6bb64b370b90e7ef1fa532be9e591a81c3493e00" + revision = "df8e78a645e18d56ed7bb9ae10ffb8174ab892e2" + version = "v1.0.1" [[projects]] - branch = "master" - digest = "1:14f2005c31ddf99c4a0f36fc440f8d1ac43224194c7c4a904b3c8f4ba5654d0b" + digest = "1:8abc57884881876d02f467bb7d4ed7ce3a58dac3f8f7ba60579ce4ffc6afd7e1" name = "github.com/hashicorp/go-sockaddr" packages = ["."] pruneopts = "UT" - revision = "6d291a969b86c4b633730bfc6b8b9d64c3aafed9" + revision = "c7188e74f6acae5a989bdc959aa779f8b9f42faf" + version = "v1.0.2" [[projects]] - branch = "master" digest = "1:f14364057165381ea296e49f8870a9ffce2b8a95e34d6ae06c759106aaef428c" name = "github.com/hashicorp/go-uuid" packages = ["."] pruneopts = "UT" revision = "4f571afc59f3043a65f8fe6bf46d887b10a01d43" + version = "v1.0.1" [[projects]] - branch = "master" - digest = "1:cf296baa185baae04a9a7004efee8511d08e2f5f51d4cbe5375da89722d681db" + digest = "1:c77361e611524ec8f2ad37c408c3c916111a70b6acf806a1200855696bf8fa4d" name = "github.com/hashicorp/golang-lru" packages = [ ".", "simplelru", ] pruneopts = "UT" - revision = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3" + revision = "7f827b33c0f158ec5dfbba01bb0b14a4541fd81d" + version = "v0.5.3" [[projects]] - branch = "master" - digest = "1:a361611b8c8c75a1091f00027767f7779b29cb37c456a71b8f2604c88057ab40" + digest = "1:c0d19ab64b32ce9fe5cf4ddceba78d5bc9807f0016db6b1183599da3dcc24d10" name = "github.com/hashicorp/hcl" packages = [ ".", @@ -853,38 +1027,32 @@ "json/token", ] pruneopts = "UT" - revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168" + revision = "8cb6e5b959231cc1119e43259c4a608f9c51a241" + version = "v1.0.0" [[projects]] digest = "1:acc81e4e4289587b257ccdfccbc6eaf16d4c2fb57dda73c6bb349bf50f02501f" name = "github.com/hashicorp/serf" packages = ["coordinate"] pruneopts = "UT" - revision = "15cfd05de3dffb3664aa37b06e91f970b825e380" - version = "v0.8.3" + revision = "1d3fdf93bbe5002c5023da50402368a817488691" + version = "v0.8.5" [[projects]] - digest = "1:31e20c290aaed8b03e36350241a9f862e4fd53d11780a41d231771ace9a1be03" + digest = "1:36fa70a309254632347d2e243c91d52ded66e002e2edf0b6488ea80b0e4403e7" name = "github.com/hashicorp/vault" packages = [ "api", - "helper/compressutil", - "helper/hclutil", - "helper/jsonutil", - "helper/parseutil", - "helper/strutil", + "sdk/helper/compressutil", + "sdk/helper/consts", + "sdk/helper/hclutil", + "sdk/helper/jsonutil", + "sdk/helper/parseutil", + "sdk/helper/strutil", ] pruneopts = "UT" - revision = "e21712a687889de1125e0a12a980420b1a4f72d3" - version = "v0.10.4" - -[[projects]] - digest = "1:8f3e1c572760f95e2b36c360396a9d4f9df9f53026b426208ef618b5112fd1fe" - name = "github.com/helm/helm" - packages = ["pkg/hooks"] - pruneopts = "UT" - revision = "79d07943b03aea2b76c12644b4b54733bc5958d6" - version = "v2.13.0" + revision = "0f5c835d1cf91c00d01cb29a0048732d91357afa" + version = "v1.3.0" [[projects]] branch = "master" @@ -895,8 +1063,7 @@ revision = "d55458df857cfff952e4bf72ce1b567c5a4e141c" [[projects]] - branch = "master" - digest = "1:59392ed8afb901aab4287d4894df8191722e34f3957716f4350c8c133ce99046" + digest = "1:a1038ef593beb4771c8f0f9c26e8b00410acd800af5c6864651d9bf160ea1813" name = "github.com/hpcloud/tail" packages = [ ".", @@ -906,23 +1073,24 @@ "winfile", ] pruneopts = "UT" - revision = "a1dbeea552b7c8df4b542c66073e393de198a800" + revision = "a30252cb686a21eb2d0b98132633053ec2f7f1e5" + version = "v1.0.0" [[projects]] - digest = "1:f9a5e090336881be43cfc1cf468330c1bdd60abdc9dd194e0b1ab69f4b94dd7c" + digest = "1:7e9014f41c8285f91b8f6170a30f633532c8d095b4ead42024e1f460c0ac497d" name = "github.com/huandu/xstrings" packages = ["."] pruneopts = "UT" - revision = "f02667b379e2fb5916c3cda2cf31e0eb885d79f8" - version = "v1.2.0" + revision = "874a673206bf7a5c86d29876dfeaccca0922ab62" + version = "v1.2.1" [[projects]] branch = "master" - digest = "1:89cd2208bdeb192cc83ee287216af3c987fc87a90b9087718ad6631b636cefcf" + digest = "1:b42f449a8b6e31294dcac04a5a8b990ec494f1b046cf9c00b3a12b20f4d05807" name = "github.com/iancoleman/strcase" packages = ["."] pruneopts = "UT" - revision = "3605ed457bf7f8caa1371b4fafadadc026673479" + revision = "16388991a33441046539eb716cff4d294d556c70" [[projects]] digest = "1:5258ca648f4cf40b7bc7c52b85009546699332616f9ed23d89b6798baca6f707" @@ -940,12 +1108,12 @@ revision = "ee2393f3bbf04700fc5d611077496c47ec1937ed" [[projects]] - digest = "1:3e260afa138eab6492b531a3b3d10ab4cb70512d423faa78b8949dec76e66a21" + digest = "1:78d28d5b84a26159c67ea51996a230da4bc07cac648adaae1dfb5fc0ec8e40d3" name = "github.com/imdario/mergo" packages = ["."] pruneopts = "UT" - revision = "9316a62528ac99aaecb4e47eadd6dc8aa6533d58" - version = "v0.3.5" + revision = "1afb36080aec31e0d1528973ebe6721b191b0369" + version = "v0.3.8" [[projects]] branch = "master" @@ -976,8 +1144,7 @@ revision = "d14ea06fba99483203c19d92cfcd13ebe73135f4" [[projects]] - branch = "master" - digest = "1:ae09cf9493c4c7b9f5561b613cacf78613303ecd0b6d68c2bb2944d33e334da1" + digest = "1:1403497bdb813f510a7f6a051c26f93be98608a2165587ce71aad6bac3dd387c" name = "github.com/jhump/protoreflect" packages = [ "desc", @@ -986,7 +1153,8 @@ "internal", ] pruneopts = "UT" - revision = "95c5cbbeaee7fe3c2b5ecf0a163144140dfb4d61" + revision = "c67d679c9f863957281faba646d790dbab6cf3b3" + version = "v1.5.0" [[projects]] digest = "1:bb81097a5b62634f3e9fec1014657855610c82d19b9a40c17612e32651e35dca" @@ -996,20 +1164,32 @@ revision = "c2b33e84" [[projects]] - digest = "1:eaefc85d32c03e5f0c2b88ea2f79fce3d993e2c78316d21319575dd4ea9153ca" + digest = "1:beb5b4f42a25056f0aa291b5eadd21e2f2903a05d15dfe7caf7eaee7e12fa972" name = "github.com/json-iterator/go" packages = ["."] pruneopts = "UT" - revision = "ab8a2e0c74be9d3be70b3184d9acc634935ded82" - version = "1.1.4" + revision = "03217c3e97663914aec3faafde50d081f197a0a2" + version = "v1.1.8" [[projects]] - digest = "1:16dd6b893b78a50564cdde1d9f7ea67224dece11bb0886bd882f1dc3dc1d440d" + digest = "1:076c531484852c227471112d49465873aaad47e5ad6e1aec3a5b092a436117ef" + name = "github.com/jstemmer/go-junit-report" + packages = [ + ".", + "formatter", + "parser", + ] + pruneopts = "UT" + revision = "cc1f095d5cc5eca2844f5c5ea7bb37f6b9bf6cac" + version = "v0.9.1" + +[[projects]] + digest = "1:86c75d55fde56a814f69515d092963634d6f5f6bc1c3e9091b01fbe373a9546e" name = "github.com/k0kubun/pp" packages = ["."] pruneopts = "UT" - revision = "027a6d1765d673d337e687394dbe780dd64e2a1e" - version = "v2.3.0" + revision = "3d73dea227e0711e38b911ffa6fbafc8ff6b2991" + version = "v3.0.1" [[projects]] branch = "master" @@ -1028,23 +1208,23 @@ version = "v1.4.0" [[projects]] - digest = "1:ae5f4d0779a45e2cb3075d8b3ece6c623e171407f4aac83521392ff06d188871" + digest = "1:fd7f169f32c221b096c74e756bda16fe22d3bb448bbf74042fd0700407a1f92f" name = "github.com/kevinburke/ssh_config" packages = ["."] pruneopts = "UT" - revision = "81db2a75821ed34e682567d48be488a1c3121088" - version = "0.5" + revision = "6cfae18c12b8934b1afba3ce8159476fdef666ba" + version = "1.0" [[projects]] branch = "master" - digest = "1:6bc9f1251db7b9e95316813d9564d158a886b796f5073e767151b2c1178c7109" + digest = "1:e3b8d93453a98130087bada037fe2081291ee1ed95c9a76194e3693503200425" name = "github.com/keybase/go-ps" packages = [ ".", "darwincgo", ] pruneopts = "UT" - revision = "668c8856d9992f97248b3177d45743d2cc1068db" + revision = "91aafc93ba19d1988cff338c1929d35b6c6f5b50" [[projects]] digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de" @@ -1055,12 +1235,20 @@ version = "v1.0.2" [[projects]] - digest = "1:29d28429a93b076908a36420a7ecb2bf429d24c15a4b5e2c220ea00fc84b71af" + digest = "1:3e2fbf3f6d30c4c009be006f9d2a9eaefc804d8f6b991e88cb793b87318cc5bc" name = "github.com/kr/pty" packages = ["."] pruneopts = "UT" - revision = "db8e3cd836b82e82e0a9c8edc6896967dd31374f" - version = "v1.1.3" + revision = "24b51915630e1d9d3c6adf15a3a96796bbc3cd43" + version = "v1.1.8" + +[[projects]] + branch = "master" + digest = "1:10b85f58562d487a3bd7da6ba5b895bc221d5ecbd89df9c7c5a36004e827ade1" + name = "github.com/liggitt/tabwriter" + packages = ["."] + pruneopts = "UT" + revision = "89fcab3d43de07060e4fd4c1547430ed57e87f24" [[projects]] digest = "1:5a0ef768465592efca0412f7e838cdc0826712f8447e70e6ccc52eb441e9ab13" @@ -1071,8 +1259,7 @@ version = "v1.8.1" [[projects]] - branch = "master" - digest = "1:84a5a2b67486d5d67060ac393aa255d05d24ed5ee41daecd5635ec22657b6492" + digest = "1:927762c6729b4e72957ba3310e485ed09cf8451c5a637a52fd016a9fe09e7936" name = "github.com/mailru/easyjson" packages = [ "buffer", @@ -1080,7 +1267,8 @@ "jwriter", ] pruneopts = "UT" - revision = "60711f1a8329503b04e1c88535f419d0bb440bff" + revision = "1b2b06f5f209fea48ff5922d8bfb2b9ed5d8f00b" + version = "v0.7.0" [[projects]] branch = "master" @@ -1091,28 +1279,28 @@ revision = "81af80346b1a01caae0cbc27fd3c1ba5b11e189f" [[projects]] - digest = "1:c658e84ad3916da105a761660dcaeb01e63416c8ec7bc62256a9b411a05fcd67" + digest = "1:4a29eeb25603debe8f2098a9902c4d3851034cf70d33be428826e86e8c30a1b0" name = "github.com/mattn/go-colorable" packages = ["."] pruneopts = "UT" - revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072" - version = "v0.0.9" + revision = "98ec13f34aabf44cc914c65a1cfb7b9bc815aef1" + version = "v0.1.4" [[projects]] - digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb" + digest = "1:d62282425ffb75047679d7e2c3b980eea7f82c05ef5fb9142ee617ebac6e7432" name = "github.com/mattn/go-isatty" packages = ["."] pruneopts = "UT" - revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" - version = "v0.0.3" + revision = "88ba11cfdc67c7588b30042edf244b2875f892b6" + version = "v0.0.10" [[projects]] - digest = "1:cdb899c199f907ac9fb50495ec71212c95cb5b0e0a8ee0800da0238036091033" + digest = "1:8b9352f5af622f234923139000732eb2fb32574949fa84d60a21c70e5dd7d3e6" name = "github.com/mattn/go-runewidth" packages = ["."] pruneopts = "UT" - revision = "ce7b0b5c7b45a81508558cd1dba6bb1e4ddb51bb" - version = "v0.0.3" + revision = "f93a0d58d5fd95e53f82782d07bb0c79d23e1290" + version = "v0.0.6" [[projects]] digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" @@ -1131,12 +1319,20 @@ revision = "9520e82c474b0a04dd04f8a40959027271bab992" [[projects]] - branch = "master" - digest = "1:8eb17c2ec4df79193ae65b621cd1c0c4697db3bc317fe6afdc76d7f2746abd05" + digest = "1:09ca328575f38b80969ccf857f6d7302f2ce09d53778ea7aaba526cfd2cec739" + name = "github.com/mitchellh/copystructure" + packages = ["."] + pruneopts = "UT" + revision = "9a1b6f44e8da0e0e374624fb0a825a231b00c537" + version = "v1.0.0" + +[[projects]] + digest = "1:5d231480e1c64a726869bc4142d270184c419749d34f167646baa21008eb0a79" name = "github.com/mitchellh/go-homedir" packages = ["."] pruneopts = "UT" - revision = "3864e76763d94a6df2f9960b16a20a33da9f9a66" + revision = "af06845cf3004701891bf4fdb884bfe4920b3727" + version = "v1.1.0" [[projects]] digest = "1:abf08734a6527df70ed361d7c369fb580e6840d8f7a6012e5f609fdfd93b4e48" @@ -1147,20 +1343,28 @@ version = "v1.0.0" [[projects]] - branch = "master" - digest = "1:544635141f5fb084637823f438f3563be046a9730c256d2e7760dbb741cd88b5" + digest = "1:61332bb44d05257bbf0356d8400a8b30fe0b9fdc3b72b8b55661da8f0a4f39ae" name = "github.com/mitchellh/hashstructure" packages = ["."] pruneopts = "UT" - revision = "2bca23e0e452137f789efbc8610126fd8b94f73b" + revision = "a38c50148365edc8df43c1580c48fb2b3a1e9cd7" + version = "v1.0.0" [[projects]] - branch = "master" - digest = "1:5ab79470a1d0fb19b041a624415612f8236b3c06070161a910562f2b2d064355" + digest = "1:53bc4cd4914cd7cd52139990d5170d6dc99067ae31c56530621b18b35fc30318" name = "github.com/mitchellh/mapstructure" packages = ["."] pruneopts = "UT" - revision = "f15292f7a699fcc1a38a80977f80a046874ba8ac" + revision = "3536a929edddb9a5b34bd6861dc4a9647cb459fe" + version = "v1.1.2" + +[[projects]] + digest = "1:2a7e6f8bebdca6bd8bc359c37f01ae1c4ea4f8481eaabf93b1ae4863f15b72c7" + name = "github.com/mitchellh/reflectwalk" + packages = ["."] + pruneopts = "UT" + revision = "3e2c75dfad4fbf904b58782a80fd595c760ad185" + version = "v1.0.1" [[projects]] digest = "1:33422d238f147d247752996a26574ac48dcf472976eda7f5134015f06bf16563" @@ -1179,15 +1383,23 @@ version = "1.0.1" [[projects]] - digest = "1:abcdbf03ca6ca13d3697e2186edc1f33863bbdac2b3a44dfa39015e8903f7409" + digest = "1:906eb1ca3c8455e447b99a45237b2b9615b665608fd07ad12cce847dd9a1ec43" + name = "github.com/morikuni/aec" + packages = ["."] + pruneopts = "UT" + revision = "39771216ff4c63d11f5e604076f9c45e8be1067b" + version = "v1.0.0" + +[[projects]] + digest = "1:94ac61005d8a6d448d3dfbfa6bcc1bffe4c36b26bd5e8ba714c21bb241c1c9b8" name = "github.com/olekukonko/tablewriter" packages = ["."] pruneopts = "UT" - revision = "e6d60cf7ba1f42d86d54cdf5508611c4aafb3970" - version = "v0.0.1" + revision = "1ab4b831fd5f2aad691b6870d22fff83e43e6343" + version = "v0.0.3" [[projects]] - digest = "1:9dd8858ae7fa91d2477ec05605b000d3c1ad65e3a1e36f9bf8f97a170c05ea05" + digest = "1:e8b90ccda83af6f29b677f8b01a0be6721ab974c9f57d2f13b6149e478dfb4ec" name = "github.com/onsi/ginkgo" packages = [ ".", @@ -1211,11 +1423,11 @@ "types", ] pruneopts = "UT" - revision = "2e1be8f7d90e9d3e3e58b0ce470f2f14d075406f" - version = "v1.7.0" + revision = "ce5d301e555bb672c693c099ba6ca5087b06c0b4" + version = "v1.10.3" [[projects]] - digest = "1:b5152532915a65c7a56f27315b3b1eecb9daaf48fa69e822e36bed28a9b73498" + digest = "1:79fc7c7ea072e90996cfcf725bf312945d3d5e558ff1cc72822e29047db8d423" name = "github.com/onsi/gomega" packages = [ ".", @@ -1236,8 +1448,8 @@ "types", ] pruneopts = "UT" - revision = "bdebf9e0ece900259084cfa4121b97ce1a540939" - version = "v1.7.0" + revision = "f9a52764bd5a0fd2d201bcca584351d03b72f8da" + version = "v1.7.1" [[projects]] digest = "1:ee4d4af67d93cc7644157882329023ce9a7bcfce956a079069a9405521c7cc8d" @@ -1248,36 +1460,61 @@ version = "v1.0.0-rc1" [[projects]] - digest = "1:b2ee62e09bec113cf086d2ce0769efcc7bf79481aba8373fd8f7884e94df3462" - name = "github.com/pelletier/go-buffruneio" - packages = ["."] + digest = "1:11db38d694c130c800d0aefb502fb02519e514dc53d9804ce51d1ad25ec27db6" + name = "github.com/opencontainers/image-spec" + packages = [ + "specs-go", + "specs-go/v1", + ] + pruneopts = "UT" + revision = "d60099175f88c47cd379c4738d158884749ed235" + version = "v1.0.1" + +[[projects]] + digest = "1:1869683e323ebff2bdf8adcb560f82bf6f8d94019d35099e3403f7df12e9c07e" + name = "github.com/opencontainers/runc" + packages = [ + "libcontainer/system", + "libcontainer/user", + ] pruneopts = "UT" - revision = "c37440a7cf42ac63b919c752ca73a85067e05992" - version = "v0.2.0" + revision = "baf6536d6259209c3edfa2b22237af82942d3dfa" + version = "v0.1.1" [[projects]] - digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" + digest = "1:6eea828983c70075ca297bb915ffbcfd3e34c5a50affd94428a65df955c0ff9c" name = "github.com/pelletier/go-toml" packages = ["."] pruneopts = "UT" - revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" - version = "v1.2.0" + revision = "903d9455db9ff1d7ac1ab199062eca7266dd11a3" + version = "v1.6.0" [[projects]] branch = "master" - digest = "1:3bf17a6e6eaa6ad24152148a631d18662f7212e21637c2699bff3369b7f00fa2" + digest = "1:89da0f0574bc94cfd0ac8b59af67bf76cdd110d503df2721006b9f0492394333" name = "github.com/petar/GoLLRB" packages = ["llrb"] pruneopts = "UT" - revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" + revision = "33fb24c13b99c46c93183c291836c573ac382536" [[projects]] - digest = "1:0e7775ebbcf00d8dd28ac663614af924411c868dca3d5aa762af0fae3808d852" + digest = "1:a8c2725121694dfbf6d552fb86fe6b46e3e7135ea05db580c28695b916162aad" name = "github.com/peterbourgon/diskv" packages = ["."] pruneopts = "UT" - revision = "5f041e8faa004a95c88a202771f4cc3e991971e6" - version = "v2.0.1" + revision = "0be1b92a6df0e4f5cb0a5d15fb7f643d0ad93ce6" + version = "v3.0.0" + +[[projects]] + digest = "1:d843e9c8e27913780ac7a3d9014a19a4b2752d1dda1250e6fdba48bafe75fa6e" + name = "github.com/pierrec/lz4" + packages = [ + ".", + "internal/xxh32", + ] + pruneopts = "UT" + revision = "9085dacd1e1eca033047a5514195779360363ced" + version = "2.4.0" [[projects]] digest = "1:cf31692c14422fa27c83a05292eb5cbe0fb2775972e8f1f8446a71549bd8980b" @@ -1288,7 +1525,7 @@ version = "v0.8.1" [[projects]] - digest = "1:feed74c407cbdb93182566543cb4949d672dad7ba2eedf5430d56960d8bff7cd" + digest = "1:431572c359e7ae79b79b60c7a90348429cba18aff5588b05cfb84331df26011b" name = "github.com/prometheus/client_golang" packages = [ "api", @@ -1298,8 +1535,8 @@ "prometheus/promhttp", ] pruneopts = "UT" - revision = "abad2d1bd44235a26707c172eab6bca5bf2dbad3" - version = "v0.9.1" + revision = "55450579111f95e3722cb93dec62fe9e847d6130" + version = "v1.2.1" [[projects]] branch = "master" @@ -1307,11 +1544,10 @@ name = "github.com/prometheus/client_model" packages = ["go"] pruneopts = "UT" - revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f" + revision = "14fe0d1b01d4d5fc031dd4bec1823bd3ebbe8016" [[projects]] - branch = "master" - digest = "1:63b68062b8968092eb86bedc4e68894bd096ea6b24920faca8b9dcf451f54bb5" + digest = "1:f119e3205d3a1f0f19dbd7038eb37528e2c6f0933269dc344e305951fb87d632" name = "github.com/prometheus/common" packages = [ "expfmt", @@ -1319,28 +1555,28 @@ "model", ] pruneopts = "UT" - revision = "c7de2306084e37d54b8be01f3541a8464345e9a5" + revision = "287d3e634a1e550c9e463dd7e5a75a422c614505" + version = "v0.7.0" [[projects]] - branch = "master" - digest = "1:8c49953a1414305f2ff5465147ee576dd705487c35b15918fcd4efdc0cb7a290" + digest = "1:ec0ff4bd619a67065e34d6477711ed0117e335f99059a4c508e0fe21cfe7b304" name = "github.com/prometheus/procfs" packages = [ ".", + "internal/fs", "internal/util", - "nfs", - "xfs", ] pruneopts = "UT" - revision = "05ee40e3a273f7245e8777337fc7b46e533a9a92" + revision = "6d489fc7f1d9cd890a250f3ea3431b1744b9623f" + version = "v0.0.8" [[projects]] - digest = "1:8911a11a3a86ed203519bf4ad20915f2c1b13556af944ad4adb31ac6c91da089" + digest = "1:92f6967d520f75fb77b7da52ee7057aa11ac758b4bf8401552e1bd9e8ed38c4b" name = "github.com/prometheus/prometheus" packages = ["discovery/targetgroup"] pruneopts = "UT" - revision = "67dc912ac8b24f94a1fc478f352d25179c94ab9b" - version = "v2.5.0" + revision = "edeb7a44cbf745f1d8be4ea6f215e79e651bfe19" + version = "v2.14.0" [[projects]] digest = "1:d7aa51c836ace8d00a3d88b4058c470624bdd7045cd3b0f58c2d6ba7ab4433dc" @@ -1351,28 +1587,28 @@ version = "v1.0.0" [[projects]] - digest = "1:0665976cc6d8c2e60dafca32820b6b7eca70f37ded0bcccc103388e1c0d05c53" + digest = "1:a278d57d6315d6f405dbaebdece8eb0a17e243e5f96456b00bfc0dbfb3fe3286" name = "github.com/radovskyb/watcher" packages = ["."] pruneopts = "UT" - revision = "6145e1439b9de93806925353403f91d2abbad8a5" - version = "v1.0.2" + revision = "f5989f8deca223d590d5a130c77ea375fe9fde30" + version = "v1.0.7" [[projects]] - digest = "1:b36a0ede02c4c2aef7df7f91cbbb7bb88a98b5d253509d4f997dda526e50c88c" + digest = "1:2ee0f15eb0fb04f918db7c2dcf39745f40d69f798ef171610a730e8a56aaa4fd" name = "github.com/russross/blackfriday" packages = ["."] pruneopts = "UT" - revision = "05f3235734ad95d0016f6a23902f06461fcf567a" - version = "v1.5.2" + revision = "d3b5b032dc8e8927d31a5071b56e14c89f045135" + version = "v2.0.1" [[projects]] - digest = "1:0e792eea6c96ec55ff302ef33886acbaa5006e900fefe82689e88d96439dcd84" + digest = "1:6baa565fe16f8657cf93469b2b8a6c61a277827734400d27e44d589547297279" name = "github.com/ryanuber/go-glob" packages = ["."] pruneopts = "UT" - revision = "572520ed46dbddaed19ea3d9541bdd0494163693" - version = "v0.1" + revision = "51a8f68e6c24dc43f1e371749c89a267de4ebc53" + version = "v1.0.0" [[projects]] digest = "1:d917313f309bda80d27274d53985bc65651f81a5b66b820749ac7f8ef061fd04" @@ -1382,6 +1618,22 @@ revision = "1744e2970ca51c86172c8190fadad617561ed6e7" version = "v1.0.0" +[[projects]] + digest = "1:9421f6e9e28ef86933e824b5caff441366f2b69bb281085b9dca40e1f27a1602" + name = "github.com/shurcooL/sanitized_anchor_name" + packages = ["."] + pruneopts = "UT" + revision = "7bfe4c7ecddb3666a94b053b422cdd8f5aaa3615" + version = "v1.0.0" + +[[projects]] + digest = "1:04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b41976" + name = "github.com/sirupsen/logrus" + packages = ["."] + pruneopts = "UT" + revision = "839c75faf7f98a33d445d181f3018b5c3409a45e" + version = "v1.4.2" + [[projects]] digest = "1:67e3edc538b069f5656768693bd90957ee55b6e2249901db834a24d0c9fa5947" name = "github.com/solo-io/envoy-operator" @@ -1401,7 +1653,7 @@ revision = "171e4740d00f71bdc66de3aea93a1b8606f1c1a0" [[projects]] - digest = "1:95bcd838634e7ba682b328fabef757d4e0f83c0b345ee82e1d87db69f8e751b0" + digest = "1:19fe561085bef5a18bdd917fcb2d55bd552f28ba65d6b1dd9766117d375a01a8" name = "github.com/solo-io/go-utils" packages = [ "certutils", @@ -1416,7 +1668,9 @@ "githubutils", "hashutils", "healthchecker", + "installutils", "installutils/helmchart", + "installutils/helmignore", "installutils/kuberesource", "kubeinstallutils", "kubeutils", @@ -1440,8 +1694,8 @@ "vfsutils", ] pruneopts = "UT" - revision = "7a2d18c9ca395de2ebf7df015d5e1bdac18e122d" - version = "v0.10.25" + revision = "01471632103fbbd9302f9d876d8c81db331081ee" + version = "v0.11.0" [[projects]] digest = "1:3f4ac0fb4306bc49eb2111c4898bfb6e98e1ca7805a0b8c7692ebc41ad5dadc3" @@ -1452,11 +1706,11 @@ "pkg/signature", ] pruneopts = "UT" - revision = "2729ed44327179fe4ab1afee9957b8375b9845b4" - version = "v0.1.1" + revision = "a1c75ffaa40ea2b89368bfc338dc3f6f990b6df2" + version = "v0.1.2" [[projects]] - digest = "1:73b5fad1f8559d0f677fb7a311bd3b6ec4d549ea95e707621d6703420589f9d5" + digest = "1:e501317a58a4e3b5bd510932e9a9c855714623cfc98144b09f7aa93a02d44431" name = "github.com/solo-io/solo-kit" packages = [ "api/external/kubernetes/configmap", @@ -1527,19 +1781,19 @@ "test/setup", ] pruneopts = "UT" - revision = "592d7edae56b1c0d6a10be34ca742d5735f39034" - version = "v0.11.12" + revision = "d556dcb3dbbaecdd7b483beaa612a322d3a45bb7" + version = "v0.11.13" [[projects]] - digest = "1:3e39bafd6c2f4bf3c76c3bfd16a2e09e016510ad5db90dc02b88e2f565d6d595" + digest = "1:bb495ec276ab82d3dd08504bbc0594a65de8c3b22c6f2aaa92d05b73fbf3a82e" name = "github.com/spf13/afero" packages = [ ".", "mem", ] pruneopts = "UT" - revision = "f4711e4db9e9a1d3887343acb72b2bbfc2f686f5" - version = "v1.2.1" + revision = "588a75ec4f32903aa5e39a2619ba6a4631e28424" + version = "v1.2.2" [[projects]] digest = "1:08d65904057412fc0270fc4812a1c90c594186819243160dc779a402d4b6d0bc" @@ -1550,15 +1804,15 @@ version = "v1.3.0" [[projects]] - digest = "1:e01b05ba901239c783dfe56450bcde607fc858908529868259c9a8765dc176d0" + digest = "1:abe9f3f23399646a6263682cacc9e86969f6c7e768f0ef036449926aa24cbbef" name = "github.com/spf13/cobra" packages = [ ".", "doc", ] pruneopts = "UT" - revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" - version = "v0.0.3" + revision = "f2b07da1e2c38d5f12845a4f607e2e1018cbb1f5" + version = "v0.0.5" [[projects]] digest = "1:1b753ec16506f5864d26a28b43703c58831255059644351bbcb019b843950900" @@ -1569,20 +1823,20 @@ version = "v1.1.0" [[projects]] - digest = "1:9424f440bba8f7508b69414634aef3b2b3a877e522d8a4624692412805407bb7" + digest = "1:524b71991fc7d9246cc7dc2d9e0886ccb97648091c63e30eef619e6862c955dd" name = "github.com/spf13/pflag" packages = ["."] pruneopts = "UT" - revision = "583c0c0531f06d5278b7d917446061adc344b5cd" - version = "v1.0.1" + revision = "2e9d26c8c37aae03e3f9d4e90b7116f5accb7cab" + version = "v1.0.5" [[projects]] - digest = "1:11118bd196646c6515fea3d6c43f66162833c6ae4939bfb229b9956d91c6cf17" + digest = "1:0b60fc944fb6a7b6c985832bd341bdb7ed8fe894fea330414e7774bb24652962" name = "github.com/spf13/viper" packages = ["."] pruneopts = "UT" - revision = "b5bf975e5823809fb22c7644d008757f78a4259e" - version = "v1.4.0" + revision = "72b022eb357a56469725dcd03918449e2278d02e" + version = "v1.5.0" [[projects]] digest = "1:e4ed0afd67bf7be353921665cdac50834c867ff1bba153efc0745b755a7f5905" @@ -1598,12 +1852,12 @@ version = "v1.4.0" [[projects]] - digest = "1:9deeaaf623bd5bff1aff7317417ffcd960557afa3b1a1dc27ca800a416a4b6a3" - name = "github.com/technosophos/moniker" + digest = "1:f4b32291cad5efac2bfdba89ccde6aa04618b62ce06c1a571da2dc4f3f2677fb" + name = "github.com/subosito/gotenv" packages = ["."] pruneopts = "UT" - revision = "a5dbd03a2245d554160e3ae6bfdcf969fe58b431" - version = "0.2.0" + revision = "2ef7124db659d49edac6aa459693a15ae36c671a" + version = "v1.2.0" [[projects]] digest = "1:172f94a6b3644a8f9e6b5e5b7fc9fe1e42d424f52a0300b2e7ab1e57db73f85d" @@ -1614,7 +1868,46 @@ version = "v0.2.1" [[projects]] - digest = "1:50c904c2e8728fa293b8c166d78d9ebda0866a056fac84c436a8cd04b7808125" + branch = "master" + digest = "1:87fe9bca786484cef53d52adeec7d1c52bc2bfbee75734eddeb75fc5c7023871" + name = "github.com/xeipuuv/gojsonpointer" + packages = ["."] + pruneopts = "UT" + revision = "02993c407bfbf5f6dae44c4f4b1cf6a39b5fc5bb" + +[[projects]] + branch = "master" + digest = "1:dc6a6c28ca45d38cfce9f7cb61681ee38c5b99ec1425339bfc1e1a7ba769c807" + name = "github.com/xeipuuv/gojsonreference" + packages = ["."] + pruneopts = "UT" + revision = "bd5ef7bd5415a7ac448318e64f11a24cd21e594b" + +[[projects]] + digest = "1:a8a0ed98532819a3b0dc5cf3264a14e30aba5284b793ba2850d6f381ada5f987" + name = "github.com/xeipuuv/gojsonschema" + packages = ["."] + pruneopts = "UT" + revision = "82fcdeb203eb6ab2a67d0a623d9c19e5e5a64927" + version = "v1.2.0" + +[[projects]] + digest = "1:8458b1a19a304c09d8f109a9463a419f703e3d1a81615afcaf3593dcce6749b9" + name = "go.mongodb.org/mongo-driver" + packages = [ + "bson", + "bson/bsoncodec", + "bson/bsonrw", + "bson/bsontype", + "bson/primitive", + "x/bsonx/bsoncore", + ] + pruneopts = "UT" + revision = "797e0a635920c291b1808180bf7249eaac5eafed" + version = "v1.1.3" + +[[projects]] + digest = "1:75f8a01a2e72d518ea0fb180684488203712f3531c1c71a70c503ada2e4be314" name = "go.opencensus.io" packages = [ ".", @@ -1627,6 +1920,7 @@ "plugin/ochttp", "plugin/ochttp/propagation/b3", "resource", + "resource/resourcekeys", "stats", "stats/internal", "stats/view", @@ -1639,27 +1933,35 @@ "zpages/internal", ] pruneopts = "UT" - revision = "59d1ce35d30f3c25ba762169da2a37eab6ffa041" - version = "v0.22.1" + revision = "aad2c527c5defcf89b5afab7f37274304195a6b2" + version = "v0.22.2" [[projects]] - digest = "1:3c1a69cdae3501bf75e76d0d86dc6f2b0a7421bc205c0cb7b96b19eed464a34d" + digest = "1:c708d00d1097e62bf4f3a72f239efa7dafc257581421b0b7d3789e1ff5299f30" name = "go.uber.org/atomic" packages = ["."] pruneopts = "UT" - revision = "1ea20fb1cbb1cc08cbd0d913a96dead89aa18289" - version = "v1.3.2" + revision = "40ae6a40a970ef4cdbffa7b24b280e316db8accc" + version = "v1.5.1" [[projects]] - digest = "1:60bf2a5e347af463c42ed31a493d817f8a72f102543060ed992754e689805d1a" + digest = "1:e6d88834deb4e35eb998c74f4d042db6ccecaaf62c0f6d57905852800994af00" name = "go.uber.org/multierr" packages = ["."] pruneopts = "UT" - revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a" - version = "v1.1.0" + revision = "824d08f79702fe5f54aca8400aa0d754318786e7" + version = "v1.4.0" + +[[projects]] + branch = "master" + digest = "1:3032e90a153750ea149f68bf081f97ca738f041fba45c41c80737f572ffdf2f4" + name = "go.uber.org/tools" + packages = ["update-license"] + pruneopts = "UT" + revision = "2cfd321de3ee5d5f8a5fda2521d1703478334d98" [[projects]] - digest = "1:676160e6a4722b08e0e26b11521d575c2cb2b6f0c679e1ee6178c5d8dee51e5e" + digest = "1:260048b6193e304ee294452a9e3410c474e3ce187248c7e2e4a2631207386f74" name = "go.uber.org/zap" packages = [ ".", @@ -1670,19 +1972,19 @@ "zapcore", ] pruneopts = "UT" - revision = "27376062155ad36be76b0f12cf1572a221d3a48c" - version = "v1.10.0" + revision = "33e58d4d0120aa28d4df84cd244838c490846c9d" + version = "v1.13.0" [[projects]] branch = "master" - digest = "1:e25ef8896ed72409295f79caf50ddba5354604adb1e03921fb27cb710a1700df" + digest = "1:ac50a5bbaec7d8c5ceb06b92e42276aad51d7c018eb300f456e48063ec6f4c7e" name = "golang.org/x/crypto" packages = [ "cast5", + "chacha20", "curve25519", "ed25519", "ed25519/internal/edwards25519", - "internal/chacha20", "internal/subtle", "openpgp", "openpgp/armor", @@ -1700,32 +2002,32 @@ "ssh/terminal", ] pruneopts = "UT" - revision = "a2144134853fc9a27a7b1e3eb4f19f1a76df13c9" + revision = "ac88ee75c92c889b97e05591e9a39b6480c538b3" [[projects]] branch = "master" - digest = "1:691f3a202dd569bd0d33b8b16bcb390a479b3c6ccc8ced9cb13085e47030e11a" + digest = "1:b1444bc98b5838c3116ed23e231fee4fa8509f975abd96e5d9e67e572dd01604" name = "golang.org/x/exp" packages = [ "apidiff", "cmd/apidiff", ] pruneopts = "UT" - revision = "ac5d2bfcbfe092bf8a1233e37c03571b3047d81b" + revision = "41df830312367e01f9de6494457ff35ccab1a2fa" [[projects]] branch = "master" - digest = "1:8b680f1201926e744b91715dda339a799fcc9a37e3a9c6d742bf90b4a6e7e6de" + digest = "1:334b27eac455cb6567ea28cd424230b07b1a64334a2f861a8075ac26ce10af43" name = "golang.org/x/lint" packages = [ ".", "golint", ] pruneopts = "UT" - revision = "414d861bb4acf565ff8cb05f9906a2283b7dc75a" + revision = "fdd1cda4f05fd1fd86124f0ef9ce31a0b72c8448" [[projects]] - digest = "1:4b3acdba8f542c0991a4cd42d11346629b3dd013d57cd1c645ac837ce2857349" + digest = "1:1b6e369fbcea4e377fbea25aa05bb4a36dbaa24c3796023df40ae77c48ad8853" name = "golang.org/x/net" packages = [ "context", @@ -1738,7 +2040,9 @@ "http2/h2c", "http2/hpack", "idna", + "internal/socks", "internal/timeseries", + "proxy", "trace", ] pruneopts = "UT" @@ -1746,7 +2050,7 @@ [[projects]] branch = "master" - digest = "1:f221a62ba33f5db9684d4f2c0519818fb8466c250aad1057d4e46d47450f3622" + digest = "1:31e33f76456ccf54819ab4a646cf01271d1a99d7712ab84bf1a9e7b61cd2031b" name = "golang.org/x/oauth2" packages = [ ".", @@ -1756,29 +2060,33 @@ "jwt", ] pruneopts = "UT" - revision = "8f65e3013ebad444f13bc19536f7865efc793816" + revision = "5d9234df094ce600ff541158d1491aa10d078a47" [[projects]] branch = "master" - digest = "1:b521f10a2d8fa85c04a8ef4e62f2d1e14d303599a55d64dabf9f5a02f84d35eb" + digest = "1:a2fc247e64b5dafd3251f12d396ec85f163d5bb38763c4997856addddf6e78d8" name = "golang.org/x/sync" - packages = ["errgroup"] + packages = [ + "errgroup", + "semaphore", + ] pruneopts = "UT" - revision = "37e7f081c4d4c64e13b10787722085407fe5d15f" + revision = "cd5d95a43a6e21273425c7ae415d3df9ea832eeb" [[projects]] branch = "master" - digest = "1:3364d01296ce7eeca363e3d530ae63a2092d6f8efb85fb3d101e8f6d7de83452" + digest = "1:efd5367142eb275f599abcbc7fc7008ea3f01ce0305cd63d587743f6954603b8" name = "golang.org/x/sys" packages = [ + "cpu", "unix", "windows", ] pruneopts = "UT" - revision = "ac767d655b305d4e9612f5f6e33120b9176c4ad4" + revision = "8a8471f7e56d296bf6a05aa09520b111beb1937a" [[projects]] - digest = "1:bb8277a2ca2bcad6ff7f413b939375924099be908cedd1314baa21ecd08df477" + digest = "1:0b5dc8c3581fc3ea2b80cc2e360dfb9c2d61dd0cba0d2fe247e8edd3e83f7551" name = "golang.org/x/text" packages = [ "collate", @@ -1795,6 +2103,8 @@ "encoding/unicode", "internal/colltab", "internal/gen", + "internal/language", + "internal/language/compact", "internal/tag", "internal/triegen", "internal/ucd", @@ -1810,20 +2120,20 @@ "width", ] pruneopts = "UT" - revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" - version = "v0.3.0" + revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475" + version = "v0.3.2" [[projects]] branch = "master" - digest = "1:c9e7a4b4d47c0ed205d257648b0e5b0440880cb728506e318f8ac7cd36270bc4" + digest = "1:a2f668c709f9078828e99cb1768cb02e876cb81030545046a32b54b2ac2a9ea8" name = "golang.org/x/time" packages = ["rate"] pruneopts = "UT" - revision = "fbb02b2291d28baffd63558aa44b4b56f178d650" + revision = "555d28b269f0569763d25dbe1a237ae74c6bcc82" [[projects]] branch = "master" - digest = "1:2958bdacee682ff346b1751d176036a577969d165535f3b682b3177fa81bf614" + digest = "1:8f85b4a772856725d447a896ec5eb9b1df4fbe42705865d17628181f9bfeac50" name = "golang.org/x/tools" packages = [ "cmd/goimports", @@ -1843,9 +2153,10 @@ "internal/imports", "internal/module", "internal/semver", + "internal/span", ] pruneopts = "UT" - revision = "e45ffcd953cceb219dc536e24468c0d22a5be010" + revision = "b0650ceb63d94ec56d3a00dbdd5e37d944dbeabf" [[projects]] digest = "1:7b5ce208ea2ca1f96322e6a5b616839fe49ea798648a013039f300475a1aadfc" @@ -1858,27 +2169,30 @@ revision = "a985d3407aa71f30cf86696ee0a2f409709f22e1" [[projects]] - digest = "1:bb533ccc3d271b79ca611125beaff2ec3f06c003174849531be262a64a58953e" + digest = "1:828eb8f0cbeff1ffff082cccfdd1e824a069286e5607ca7236ea7c5ebe55269f" name = "google.golang.org/api" packages = [ "compute/v1", - "gensupport", "googleapi", - "googleapi/internal/uritemplates", "googleapi/transport", "internal", + "internal/gensupport", + "internal/third_party/uritemplates", "iterator", "option", "storage/v1", + "support/bundler", + "transport", + "transport/grpc", "transport/http", "transport/http/internal/propagation", ] pruneopts = "UT" - revision = "09a9d0a772eb18da65a7917760cf4ca9ae943c83" - version = "v0.10.0" + revision = "8a410c21381766a810817fd6200fce8838ecb277" + version = "v0.14.0" [[projects]] - digest = "1:d2a8db567a76203e3b41c1f632d86485ffd57f8e650a0d1b19d240671c2fddd7" + digest = "1:c98e9b93e6d178378530b920fe6e1aa4b3dd4972872111e83827746aa1f33ded" name = "google.golang.org/appengine" packages = [ ".", @@ -1889,37 +2203,64 @@ "internal/log", "internal/modules", "internal/remote_api", + "internal/socket", "internal/urlfetch", + "socket", "urlfetch", ] pruneopts = "UT" - revision = "4a4468ece617fc8205e99368fa2200e9d1fad421" - version = "v1.3.0" + revision = "971852bfffca25b069c31162ae8f247a3dba083b" + version = "v1.6.5" [[projects]] branch = "master" - digest = "1:ff760a397fba1ee1a22e40fb75aced010dd149a000f868d754d39a31794ec058" + digest = "1:1c817f06c38e22fd070f2e28f11d4af97cddf629da4da51fce4cb55070504580" name = "google.golang.org/genproto" packages = [ + "googleapis/api", "googleapis/api/annotations", + "googleapis/api/distribution", + "googleapis/api/label", + "googleapis/api/metric", + "googleapis/api/monitoredres", + "googleapis/container/v1", + "googleapis/devtools/cloudtrace/v2", "googleapis/iam/v1", + "googleapis/monitoring/v3", "googleapis/rpc/code", "googleapis/rpc/status", + "googleapis/type/calendarperiod", + "googleapis/type/expr", + "protobuf/field_mask", ] pruneopts = "UT" - revision = "02b4e95473316948020af0b7a4f0f22c73929b0e" + revision = "83cc0476cb11ea0da33dacd4c6354ab192de6fe6" [[projects]] - digest = "1:50e6297746c3c45c16be8855886890382796b6941db6b7b6fbcd62fe75109a51" + digest = "1:e15f69db05dd8b065a18940e96d0aa3eb40724d99e6a5eae348eb2960c698d06" name = "google.golang.org/grpc" packages = [ ".", + "backoff", "balancer", "balancer/base", + "balancer/grpclb", + "balancer/grpclb/grpc_lb_v1", "balancer/roundrobin", + "binarylog/grpc_binarylog_v1", "codes", "connectivity", "credentials", + "credentials/alts", + "credentials/alts/internal", + "credentials/alts/internal/authinfo", + "credentials/alts/internal/conn", + "credentials/alts/internal/handshaker", + "credentials/alts/internal/handshaker/service", + "credentials/alts/internal/proto/grpc_gcp", + "credentials/google", + "credentials/internal", + "credentials/oauth", "encoding", "encoding/proto", "grpclog", @@ -1927,8 +2268,17 @@ "health/grpc_health_v1", "internal", "internal/backoff", + "internal/balancerload", + "internal/binarylog", + "internal/buffer", "internal/channelz", + "internal/envconfig", "internal/grpcrand", + "internal/grpcsync", + "internal/resolver/dns", + "internal/resolver/passthrough", + "internal/syscall", + "internal/transport", "keepalive", "metadata", "naming", @@ -1936,19 +2286,17 @@ "reflection", "reflection/grpc_reflection_v1alpha", "resolver", - "resolver/dns", - "resolver/passthrough", + "serviceconfig", "stats", "status", "tap", - "transport", ] pruneopts = "UT" - revision = "168a6198bcb0ef175f7dacec0b8691fc141dc9b8" - version = "v1.13.0" + revision = "1a3960e4bd028ac0cec0a2afd27d7d8e67c11514" + version = "v1.25.1" [[projects]] - digest = "1:8aebecf08fbcb288d879a0e21de4636389c2bc58ab45789a05d7f7e94577482f" + digest = "1:d95ba5ef55d8b2cdb896d1196efd1859b62c64829b1098c8b8cc395dd34fd25c" name = "gopkg.in/AlecAivazis/survey.v1" packages = [ ".", @@ -1956,15 +2304,16 @@ "terminal", ] pruneopts = "UT" - revision = "fb519f89e19299d852ffdd9b734af122d2dcbd30" - version = "v1.7.0" + revision = "e4af3b345125b0903edb492a33a99a23e9eb3487" + version = "v1.8.7" [[projects]] digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" - name = "gopkg.in/fsnotify/fsnotify.v1" + name = "gopkg.in/fsnotify.v1" packages = ["."] pruneopts = "UT" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" + source = "https://github.com/fsnotify/fsnotify.git" version = "v1.4.7" [[projects]] @@ -1976,18 +2325,7 @@ version = "v0.9.1" [[projects]] - branch = "v2" - digest = "1:2642fd0b6900c77247d61d80cf2eb59a374ef4ffc2d25a1b95b87dc355b2894e" - name = "gopkg.in/mgo.v2" - packages = [ - "bson", - "internal/json", - ] - pruneopts = "UT" - revision = "9856a29383ce1c59f308dd1cf0363a79b5bef6b5" - -[[projects]] - digest = "1:a4cde1eec9a17eb2399a50c6e1a9fe3fde039994de058f9dbf6592d157bfe97b" + digest = "1:45df33697961c5703020e4f00720743622bc4d383138958f0b57d9db0b4921fd" name = "gopkg.in/square/go-jose.v2" packages = [ ".", @@ -1996,11 +2334,11 @@ "jwt", ] pruneopts = "UT" - revision = "e94fb177d3668d35ab39c61cbb2f311550557e83" - version = "v2.2.2" + revision = "8fd82ff1d52a5162ff23c0a48e2c64a1fa4a3f8f" + version = "v2.4.0" [[projects]] - digest = "1:866df945fc92cd221d2b384dca7de5f3131a6113b9f72a7a8019ae5046abe828" + digest = "1:eb27cfcaf8d7e4155224dd0a209f1d0ab19784fef01be142638b78b7b6becd6b" name = "gopkg.in/src-d/go-billy.v4" packages = [ ".", @@ -2010,11 +2348,11 @@ "util", ] pruneopts = "UT" - revision = "982626487c60a5252e7d0b695ca23fb0fa2fd670" - version = "v4.3.0" + revision = "780403cfc1bc95ff4d07e7b26db40a6186c5326e" + version = "v4.3.2" [[projects]] - digest = "1:44801e4be7066a82dc7a7f608d31f99c5c0f5a65a0215b37401a5657ce52940d" + digest = "1:b2ad0a18676cd4d5b4b180709c1ea34dbabd74b3d7db0cc01e6d287d5f1e3a99" name = "gopkg.in/src-d/go-git.v4" packages = [ ".", @@ -2060,15 +2398,16 @@ "utils/merkletrie/noder", ] pruneopts = "UT" - revision = "db6c41c156481962abf9a55a324858674c25ab08" - version = "v4.10.0" + revision = "0d1a009cbb604db18be960db5f1525b99a55d727" + version = "v4.13.1" [[projects]] - digest = "1:3c839a777de0e6da035c9de900b60cbec463b0a89351192c1ea083eaf9e0fce0" + branch = "v1" + digest = "1:0caa92e17bc0b65a98c63e5bc76a9e844cd5e56493f8fdbb28fad101a16254d9" name = "gopkg.in/tomb.v1" packages = ["."] pruneopts = "UT" - revision = "c131134a1947e9afd9cecfe11f4c6dff0732ae58" + revision = "dd632973f1e7218eb1089048e0798ec9ae7dceb8" [[projects]] digest = "1:78d374b493e747afa9fbb2119687e3740a7fb8d0ebabddfef0a012593aaecbb3" @@ -2079,12 +2418,56 @@ version = "v0.1.2" [[projects]] - digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" + digest = "1:b75b3deb2bce8bc079e16bb2aecfe01eb80098f5650f9e93e5643ca8b7b73737" name = "gopkg.in/yaml.v2" packages = ["."] pruneopts = "UT" - revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" - version = "v2.2.1" + revision = "1f64d6156d11335c3f22d9330b0ad14fc1e789ce" + version = "v2.2.7" + +[[projects]] + digest = "1:b22bdbf75096db5930ec7f4b77e3d07aab9926e3693b178780a2225b72606afc" + name = "helm.sh/helm/v3" + packages = [ + "internal/experimental/registry", + "internal/ignore", + "internal/resolver", + "internal/sympath", + "internal/third_party/dep/fs", + "internal/third_party/k8s.io/kubernetes/deployment/util", + "internal/tlsutil", + "internal/urlutil", + "internal/version", + "pkg/action", + "pkg/chart", + "pkg/chart/loader", + "pkg/chartutil", + "pkg/cli", + "pkg/cli/values", + "pkg/downloader", + "pkg/engine", + "pkg/getter", + "pkg/helmpath", + "pkg/helmpath/xdg", + "pkg/kube", + "pkg/kube/fake", + "pkg/lint", + "pkg/lint/rules", + "pkg/lint/support", + "pkg/plugin", + "pkg/provenance", + "pkg/release", + "pkg/releaseutil", + "pkg/repo", + "pkg/storage", + "pkg/storage/driver", + "pkg/strvals", + "pkg/time", + ] + pruneopts = "UT" + revision = "e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6" + source = "https://github.com/helm/helm" + version = "v3.0.0" [[projects]] digest = "1:131158a88aad1f94854d0aa21a64af2802d0a470fb0f01cb33c04fafd2047111" @@ -2121,12 +2504,12 @@ version = "2019.2.3" [[projects]] - branch = "master" - digest = "1:66c41d3da3f02989b7e372118f65bb3a31cc43ef22142e31502141d806f8dc4e" + digest = "1:3363ef5c237a77a65becb1aa86daf82eff76d9f7add0fca417a3dae8a17356ac" name = "k8s.io/api" packages = [ + "admission/v1", "admission/v1beta1", - "admissionregistration/v1alpha1", + "admissionregistration/v1", "admissionregistration/v1beta1", "apps/v1", "apps/v1beta1", @@ -2143,16 +2526,22 @@ "batch/v1beta1", "batch/v2alpha1", "certificates/v1beta1", + "coordination/v1", "coordination/v1beta1", "core/v1", + "discovery/v1alpha1", "events/v1beta1", "extensions/v1beta1", "imagepolicy/v1alpha1", "networking/v1", + "networking/v1beta1", + "node/v1alpha1", + "node/v1beta1", "policy/v1beta1", "rbac/v1", "rbac/v1alpha1", "rbac/v1beta1", + "scheduling/v1", "scheduling/v1alpha1", "scheduling/v1beta1", "settings/v1alpha1", @@ -2161,25 +2550,28 @@ "storage/v1beta1", ] pruneopts = "UT" - revision = "173ce66c1e39d1d0f56e0b3347ff2988068aecd0" + revision = "35e52d86657aba06859dd22099bfa14faf1effb2" + version = "kubernetes-1.16.2" [[projects]] - digest = "1:ace21b4261a9bc8d06b188f03ce48d1bed92ccba4890fad616cf283939f723c6" + digest = "1:a951ccbc1e5874912e1ea40dcb1e4d5ab249bc09ed4c97a024b8eb743e65f10a" name = "k8s.io/apiextensions-apiserver" packages = [ "pkg/apis/apiextensions", + "pkg/apis/apiextensions/v1", "pkg/apis/apiextensions/v1beta1", "pkg/client/clientset/clientset", "pkg/client/clientset/clientset/scheme", + "pkg/client/clientset/clientset/typed/apiextensions/v1", "pkg/client/clientset/clientset/typed/apiextensions/v1beta1", "pkg/features", ] pruneopts = "UT" - revision = "0fe22c71c47604641d9aa352c785b7912c200562" - version = "kubernetes-1.13.1" + revision = "5357c4baaf6562e4d37c9afc9fef99bd16d76a9f" + version = "kubernetes-1.16.2" [[projects]] - digest = "1:6489d76eab90e477f61eb30186098b5d2e45acd08cefdfdc4988e30c3752ff30" + digest = "1:75e6304eb1782b1fa9d6d28516068bcb215c6c31ddfd672bd6ec3b545d87f0e1" name = "k8s.io/apimachinery" packages = [ "pkg/api/equality", @@ -2220,7 +2612,6 @@ "pkg/util/mergepatch", "pkg/util/naming", "pkg/util/net", - "pkg/util/rand", "pkg/util/remotecommand", "pkg/util/runtime", "pkg/util/sets", @@ -2236,45 +2627,52 @@ "third_party/forked/golang/reflect", ] pruneopts = "UT" - revision = "2b1284ed4c93a43499e781493253e2ac5959c4fd" - version = "kubernetes-1.13.1" + revision = "a2eda9f80ab8a454a81bdde16d62a1afe5f931c0" + version = "kubernetes-1.16.2" [[projects]] - digest = "1:138928c37ee6ec1be14aec46c97dab5f110ffa7e81828b9d27919df371fd8f62" + digest = "1:f9d540b4a3c85da91cf1985040c38f37643d3946bea129da054c78966339edf8" name = "k8s.io/apiserver" packages = [ - "pkg/authentication/authenticator", - "pkg/authentication/serviceaccount", - "pkg/authentication/user", "pkg/features", "pkg/util/feature", ] pruneopts = "UT" - revision = "3ccfe8365421eb08e334b195786a2973460741d8" - version = "kubernetes-1.13.1" + revision = "5190913f932d82e562d4eb91d0f3d7a063bdbc07" + version = "kubernetes-1.16.2" [[projects]] - branch = "release-1.12" - digest = "1:7991e5074de01462e0cf6ef77060895b50e9026d16152a6e925cb99b67a1f8ae" + branch = "master" + digest = "1:8672eadb74af538b9fc402da780ef0cb1e6763010ff22c8ca3de386684112b01" name = "k8s.io/cli-runtime" packages = [ "pkg/genericclioptions", - "pkg/genericclioptions/printers", - "pkg/genericclioptions/resource", + "pkg/kustomize", + "pkg/kustomize/k8sdeps", + "pkg/kustomize/k8sdeps/configmapandsecret", + "pkg/kustomize/k8sdeps/kunstruct", + "pkg/kustomize/k8sdeps/kv", + "pkg/kustomize/k8sdeps/transformer", + "pkg/kustomize/k8sdeps/transformer/hash", + "pkg/kustomize/k8sdeps/transformer/patch", + "pkg/kustomize/k8sdeps/validator", + "pkg/printers", + "pkg/resource", ] pruneopts = "UT" - revision = "4c1cca29720474bad8854aa44b1dcb03d8c4e2b4" + revision = "be566597aa73e97f4a5ede0ed3546899ac218f55" [[projects]] - digest = "1:62c182475908e2bea479ad6cffa5d37eb34b97f58f80a49044a609ced9dd9165" + digest = "1:c7eb0c09c81e0df1e7beeb6cc5c1a526d9eb5da4631270226a7613061c2db99a" name = "k8s.io/client-go" packages = [ "discovery", + "discovery/cached/disk", "discovery/fake", "dynamic", "informers", "informers/admissionregistration", - "informers/admissionregistration/v1alpha1", + "informers/admissionregistration/v1", "informers/admissionregistration/v1beta1", "informers/apps", "informers/apps/v1", @@ -2293,9 +2691,12 @@ "informers/certificates", "informers/certificates/v1beta1", "informers/coordination", + "informers/coordination/v1", "informers/coordination/v1beta1", "informers/core", "informers/core/v1", + "informers/discovery", + "informers/discovery/v1alpha1", "informers/events", "informers/events/v1beta1", "informers/extensions", @@ -2303,6 +2704,10 @@ "informers/internalinterfaces", "informers/networking", "informers/networking/v1", + "informers/networking/v1beta1", + "informers/node", + "informers/node/v1alpha1", + "informers/node/v1beta1", "informers/policy", "informers/policy/v1beta1", "informers/rbac", @@ -2310,6 +2715,7 @@ "informers/rbac/v1alpha1", "informers/rbac/v1beta1", "informers/scheduling", + "informers/scheduling/v1", "informers/scheduling/v1alpha1", "informers/scheduling/v1beta1", "informers/settings", @@ -2321,8 +2727,8 @@ "kubernetes", "kubernetes/fake", "kubernetes/scheme", - "kubernetes/typed/admissionregistration/v1alpha1", - "kubernetes/typed/admissionregistration/v1alpha1/fake", + "kubernetes/typed/admissionregistration/v1", + "kubernetes/typed/admissionregistration/v1/fake", "kubernetes/typed/admissionregistration/v1beta1", "kubernetes/typed/admissionregistration/v1beta1/fake", "kubernetes/typed/apps/v1", @@ -2355,16 +2761,26 @@ "kubernetes/typed/batch/v2alpha1/fake", "kubernetes/typed/certificates/v1beta1", "kubernetes/typed/certificates/v1beta1/fake", + "kubernetes/typed/coordination/v1", + "kubernetes/typed/coordination/v1/fake", "kubernetes/typed/coordination/v1beta1", "kubernetes/typed/coordination/v1beta1/fake", "kubernetes/typed/core/v1", "kubernetes/typed/core/v1/fake", + "kubernetes/typed/discovery/v1alpha1", + "kubernetes/typed/discovery/v1alpha1/fake", "kubernetes/typed/events/v1beta1", "kubernetes/typed/events/v1beta1/fake", "kubernetes/typed/extensions/v1beta1", "kubernetes/typed/extensions/v1beta1/fake", "kubernetes/typed/networking/v1", "kubernetes/typed/networking/v1/fake", + "kubernetes/typed/networking/v1beta1", + "kubernetes/typed/networking/v1beta1/fake", + "kubernetes/typed/node/v1alpha1", + "kubernetes/typed/node/v1alpha1/fake", + "kubernetes/typed/node/v1beta1", + "kubernetes/typed/node/v1beta1/fake", "kubernetes/typed/policy/v1beta1", "kubernetes/typed/policy/v1beta1/fake", "kubernetes/typed/rbac/v1", @@ -2373,6 +2789,8 @@ "kubernetes/typed/rbac/v1alpha1/fake", "kubernetes/typed/rbac/v1beta1", "kubernetes/typed/rbac/v1beta1/fake", + "kubernetes/typed/scheduling/v1", + "kubernetes/typed/scheduling/v1/fake", "kubernetes/typed/scheduling/v1alpha1", "kubernetes/typed/scheduling/v1alpha1/fake", "kubernetes/typed/scheduling/v1beta1", @@ -2385,7 +2803,7 @@ "kubernetes/typed/storage/v1alpha1/fake", "kubernetes/typed/storage/v1beta1", "kubernetes/typed/storage/v1beta1/fake", - "listers/admissionregistration/v1alpha1", + "listers/admissionregistration/v1", "listers/admissionregistration/v1beta1", "listers/apps/v1", "listers/apps/v1beta1", @@ -2398,15 +2816,21 @@ "listers/batch/v1beta1", "listers/batch/v2alpha1", "listers/certificates/v1beta1", + "listers/coordination/v1", "listers/coordination/v1beta1", "listers/core/v1", + "listers/discovery/v1alpha1", "listers/events/v1beta1", "listers/extensions/v1beta1", "listers/networking/v1", + "listers/networking/v1beta1", + "listers/node/v1alpha1", + "listers/node/v1beta1", "listers/policy/v1beta1", "listers/rbac/v1", "listers/rbac/v1alpha1", "listers/rbac/v1beta1", + "listers/scheduling/v1", "listers/scheduling/v1alpha1", "listers/scheduling/v1beta1", "listers/settings/v1alpha1", @@ -2444,67 +2868,34 @@ "tools/clientcmd/api/v1", "tools/metrics", "tools/pager", - "tools/portforward", "tools/record", + "tools/record/util", "tools/reference", "tools/remotecommand", "tools/watch", "transport", "transport/spdy", - "util/buffer", "util/cert", "util/connrotation", "util/exec", "util/flowcontrol", "util/homedir", - "util/integer", "util/jsonpath", + "util/keyutil", "util/retry", "util/workqueue", ] pruneopts = "UT" - revision = "8d9ed539ba3134352c586810e749e58df4e94e4f" - version = "kubernetes-1.13.1" + revision = "bec269661e48cb1e5fbb0d037f356ffe9e9978a0" + version = "kubernetes-1.16.2" [[projects]] - digest = "1:dffc9ae4f0605ba668c85a12e48b65c205b1a851d3ee53c19ccf0bf5023e8d16" - name = "k8s.io/helm" - packages = [ - "pkg/chartutil", - "pkg/engine", - "pkg/getter", - "pkg/helm/environment", - "pkg/helm/helmpath", - "pkg/hooks", - "pkg/ignore", - "pkg/kube", - "pkg/manifest", - "pkg/plugin", - "pkg/proto/hapi/chart", - "pkg/proto/hapi/release", - "pkg/proto/hapi/rudder", - "pkg/proto/hapi/services", - "pkg/proto/hapi/version", - "pkg/provenance", - "pkg/releasetesting", - "pkg/releaseutil", - "pkg/renderutil", - "pkg/repo", - "pkg/rudder", - "pkg/storage", - "pkg/storage/driver", - "pkg/storage/errors", - "pkg/sympath", - "pkg/tiller", - "pkg/tiller/environment", - "pkg/timeconv", - "pkg/tlsutil", - "pkg/urlutil", - "pkg/version", - ] + branch = "master" + digest = "1:bb2e100c8957b6b6cf4a7523b645247c09bc450292b01dedfcdbfdc85aea371d" + name = "k8s.io/component-base" + packages = ["featuregate"] pruneopts = "UT" - revision = "eecf22f77df5f65c823aacd2dbd30ae6c65f186e" - version = "v2.12.3" + revision = "9e57f2cf1edade764d8307c4f3d4073e204d46de" [[projects]] digest = "1:16a43d0b78057f165fbf32077f8a1f6bd6993d9cf6ef97fb669dc152e70626cd" @@ -2516,171 +2907,108 @@ [[projects]] branch = "master" - digest = "1:9af14312e6ca4a08fa836d9de695b48f6048a6e763c6ac70790c5279cb8a3829" + digest = "1:3188bdb4e63be10aca224beb643f586a2348af69e19163346294b3892fbccb13" name = "k8s.io/kube-openapi" packages = [ + "pkg/common", "pkg/util/proto", "pkg/util/proto/validation", ] pruneopts = "UT" - revision = "e3762e86a74c878ffed47484592986685639c2cd" + revision = "30be4d16710ac61bce31eb28a01054596fe6a9f1" [[projects]] - digest = "1:c1c4018d9ef3a78c24218d3d86b7d29700df08602921fd4bf7d2a1f3c338ac11" + digest = "1:a77dadc9f3907357738dc651b7fdeb7376f52d721900a22b5c30d27b6a9b52b9" + name = "k8s.io/kubectl" + packages = [ + "pkg/cmd/util", + "pkg/cmd/util/editor", + "pkg/cmd/util/editor/crlf", + "pkg/scheme", + "pkg/util", + "pkg/util/interrupt", + "pkg/util/openapi", + "pkg/util/openapi/validation", + "pkg/util/templates", + "pkg/util/term", + "pkg/validation", + "pkg/version", + ] + pruneopts = "UT" + revision = "2ed914427d51f6fd865e0db43d72b2f22610cf32" + version = "kubernetes-1.16.2" + +[[projects]] + digest = "1:b6a12d259e842f2adfa1ec1c53ccae0dc911a4c7a072d48b55104dfc4f2b11bc" name = "k8s.io/kubernetes" packages = [ - "pkg/api/legacyscheme", "pkg/api/service", "pkg/api/v1/pod", "pkg/apis/apps", - "pkg/apis/apps/install", - "pkg/apis/apps/v1", - "pkg/apis/apps/v1beta1", - "pkg/apis/apps/v1beta2", - "pkg/apis/authentication", - "pkg/apis/authentication/install", - "pkg/apis/authentication/v1", - "pkg/apis/authentication/v1beta1", - "pkg/apis/authorization", - "pkg/apis/authorization/install", - "pkg/apis/authorization/v1", - "pkg/apis/authorization/v1beta1", "pkg/apis/autoscaling", - "pkg/apis/autoscaling/install", - "pkg/apis/autoscaling/v1", - "pkg/apis/autoscaling/v2beta1", - "pkg/apis/autoscaling/v2beta2", - "pkg/apis/batch", - "pkg/apis/batch/install", - "pkg/apis/batch/v1", - "pkg/apis/batch/v1beta1", - "pkg/apis/batch/v2alpha1", - "pkg/apis/certificates", - "pkg/apis/certificates/install", - "pkg/apis/certificates/v1beta1", - "pkg/apis/coordination", - "pkg/apis/coordination/install", - "pkg/apis/coordination/v1beta1", "pkg/apis/core", "pkg/apis/core/helper", - "pkg/apis/core/install", "pkg/apis/core/pods", "pkg/apis/core/v1", "pkg/apis/core/v1/helper", "pkg/apis/core/validation", - "pkg/apis/events", - "pkg/apis/events/install", - "pkg/apis/events/v1beta1", - "pkg/apis/extensions", - "pkg/apis/extensions/install", - "pkg/apis/extensions/v1beta1", - "pkg/apis/networking", - "pkg/apis/policy", - "pkg/apis/policy/install", - "pkg/apis/policy/v1beta1", - "pkg/apis/rbac", - "pkg/apis/rbac/install", - "pkg/apis/rbac/v1", - "pkg/apis/rbac/v1alpha1", - "pkg/apis/rbac/v1beta1", "pkg/apis/scheduling", - "pkg/apis/scheduling/install", - "pkg/apis/scheduling/v1alpha1", - "pkg/apis/scheduling/v1beta1", - "pkg/apis/settings", - "pkg/apis/settings/install", - "pkg/apis/settings/v1alpha1", - "pkg/apis/storage", - "pkg/apis/storage/install", - "pkg/apis/storage/util", - "pkg/apis/storage/v1", - "pkg/apis/storage/v1alpha1", - "pkg/apis/storage/v1beta1", "pkg/capabilities", - "pkg/controller", - "pkg/controller/deployment/util", "pkg/features", "pkg/fieldpath", - "pkg/kubectl", - "pkg/kubectl/apps", - "pkg/kubectl/cmd/get", - "pkg/kubectl/cmd/util", - "pkg/kubectl/cmd/util/editor", - "pkg/kubectl/cmd/util/editor/crlf", - "pkg/kubectl/cmd/util/openapi", - "pkg/kubectl/cmd/util/openapi/validation", - "pkg/kubectl/describe", - "pkg/kubectl/describe/versioned", - "pkg/kubectl/generated", - "pkg/kubectl/scheme", - "pkg/kubectl/util", - "pkg/kubectl/util/certificate", - "pkg/kubectl/util/deployment", - "pkg/kubectl/util/event", - "pkg/kubectl/util/fieldpath", - "pkg/kubectl/util/i18n", - "pkg/kubectl/util/podutils", - "pkg/kubectl/util/printers", - "pkg/kubectl/util/qos", - "pkg/kubectl/util/rbac", - "pkg/kubectl/util/resource", - "pkg/kubectl/util/slice", - "pkg/kubectl/util/storage", - "pkg/kubectl/util/templates", - "pkg/kubectl/util/term", - "pkg/kubectl/validation", - "pkg/kubelet/apis", "pkg/kubelet/types", "pkg/master/ports", - "pkg/printers", - "pkg/printers/internalversion", - "pkg/scheduler/api", "pkg/security/apparmor", - "pkg/serviceaccount", - "pkg/util/file", - "pkg/util/hash", - "pkg/util/interrupt", - "pkg/util/labels", - "pkg/util/net/sets", - "pkg/util/node", "pkg/util/parsers", - "pkg/util/taints", - "pkg/version", ] pruneopts = "UT" - revision = "eec55b9ba98609a46fee712359c7b5b365bdd920" - version = "v1.13.1" + revision = "b3cbbae08ec52a7fc73d334838e18d17e8512749" + version = "v1.16.3" [[projects]] - branch = "master" - digest = "1:9c6cb46fa10409b199f93e6ceda462ddfa62d74e97174591a147b38982585d24" + digest = "1:a223d412a29158a9933ed1b8bac3fc6fd36d0d8295940a128ffcadb6ff5e51aa" name = "k8s.io/utils" packages = [ + "buffer", "exec", + "integer", + "net", + "path", "pointer", + "trace", ] pruneopts = "UT" - revision = "8a16e7dd8fb6d97d1331b0c79a16722f934b00b1" + revision = "6ca3b61696b65b0e81f1a39b4937fc2d2994ed6a" [[projects]] branch = "master" - digest = "1:5dafd1a053ae70d30d7c6a176543d776223acdb031c7ce43a267cc68a7e27afb" + digest = "1:113fb5a86df7e1706a2b9823ebb79485ac006d8c104b041e22562a082e3b716d" name = "knative.dev/pkg" packages = [ "apis", "apis/duck", + "apis/duck/v1", "apis/duck/v1alpha1", "apis/duck/v1beta1", + "changeset", "configmap", + "controller", "kmeta", "kmp", + "logging", + "logging/logkey", + "metrics", + "metrics/metricskey", + "network", + "profiling", "ptr", + "tracker", ] pruneopts = "UT" - revision = "a6e24ef7e5b297969d6a87a45ac3ec6d7b3c5f0f" + revision = "da3d090aa9ee8a59804e9b51164cf1aa492800e9" [[projects]] - digest = "1:8188bca59c44917f854e28076e7b46688caffb38128967ab1ed8e58576172b75" + digest = "1:12cf05100d2c0edb4e214aba51fc7dfa5395117ded2798fabf081731fc62daef" name = "knative.dev/serving" packages = [ "pkg/apis/autoscaling", @@ -2689,12 +3017,14 @@ "pkg/apis/networking", "pkg/apis/networking/v1alpha1", "pkg/apis/serving", + "pkg/apis/serving/v1", "pkg/apis/serving/v1alpha1", "pkg/apis/serving/v1beta1", "pkg/client/clientset/versioned", "pkg/client/clientset/versioned/scheme", "pkg/client/clientset/versioned/typed/autoscaling/v1alpha1", "pkg/client/clientset/versioned/typed/networking/v1alpha1", + "pkg/client/clientset/versioned/typed/serving/v1", "pkg/client/clientset/versioned/typed/serving/v1alpha1", "pkg/client/clientset/versioned/typed/serving/v1beta1", "pkg/client/informers/externalversions", @@ -2704,10 +3034,12 @@ "pkg/client/informers/externalversions/networking", "pkg/client/informers/externalversions/networking/v1alpha1", "pkg/client/informers/externalversions/serving", + "pkg/client/informers/externalversions/serving/v1", "pkg/client/informers/externalversions/serving/v1alpha1", "pkg/client/informers/externalversions/serving/v1beta1", "pkg/client/listers/autoscaling/v1alpha1", "pkg/client/listers/networking/v1alpha1", + "pkg/client/listers/serving/v1", "pkg/client/listers/serving/v1alpha1", "pkg/client/listers/serving/v1beta1", "pkg/gc", @@ -2715,16 +3047,47 @@ "pkg/reconciler/route/config", ] pruneopts = "UT" - revision = "3f73b117b61ee5d8fe5dcedd6cca2c96014329a9" - version = "v0.8.0" + revision = "a1a35b117afe15ca2c5bd4aec5bb3574a44e802d" + version = "v0.10.0" [[projects]] - digest = "1:3d36f477f3c80248890ec1f849fe11a0e324f433bbc8c1d7e1be806b75da779f" + digest = "1:2170628baa0679ae0ed99900c8094f84b772b74e059201e6f6bb6a4344fcf755" name = "sigs.k8s.io/controller-runtime" packages = ["pkg/client/apiutil"] pruneopts = "UT" - revision = "1592b5ee945140d042351098bf3217d71f36cace" - version = "v0.2.1" + revision = "198197fe0fd7553cadd8afcd3338f8ee4b8a7e3f" + version = "v0.4.0" + +[[projects]] + digest = "1:cb422c75bab66a8339a38b64e837f3b28f3d5a8c06abd7b9048f420363baa18a" + name = "sigs.k8s.io/kustomize" + packages = [ + "pkg/commands/build", + "pkg/constants", + "pkg/expansion", + "pkg/factory", + "pkg/fs", + "pkg/git", + "pkg/gvk", + "pkg/ifc", + "pkg/ifc/transformer", + "pkg/image", + "pkg/internal/error", + "pkg/loader", + "pkg/patch", + "pkg/patch/transformer", + "pkg/resid", + "pkg/resmap", + "pkg/resource", + "pkg/target", + "pkg/transformers", + "pkg/transformers/config", + "pkg/transformers/config/defaultconfig", + "pkg/types", + ] + pruneopts = "UT" + revision = "a6f65144121d1955266b0cd836ce954c04122dc8" + version = "v2.0.3" [[projects]] digest = "1:7719608fe0b52a4ece56c2dde37bedd95b938677d1ab0f84b8a7852e4c59f849" @@ -2734,14 +3097,6 @@ revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" version = "v1.1.0" -[[projects]] - branch = "master" - digest = "1:9132eacc44d9bd1e03145ea2e9d4888800da7773d6edebb401f8cd34c9fb8380" - name = "vbom.ml/util" - packages = ["sortorder"] - pruneopts = "UT" - revision = "efcd4e0f97874370259c7d93e12aad57911dea81" - [solve-meta] analyzer-name = "dep" analyzer-version = 1 @@ -2815,7 +3170,6 @@ "github.com/hashicorp/go-multierror", "github.com/hashicorp/go-uuid", "github.com/hashicorp/vault/api", - "github.com/helm/helm/pkg/hooks", "github.com/hinshun/vt10x", "github.com/inconshreveable/go-update", "github.com/jhump/protoreflect/desc", @@ -2936,6 +3290,15 @@ "gopkg.in/AlecAivazis/survey.v1", "gopkg.in/AlecAivazis/survey.v1/terminal", "gopkg.in/yaml.v2", + "helm.sh/helm/v3/pkg/action", + "helm.sh/helm/v3/pkg/chart", + "helm.sh/helm/v3/pkg/chart/loader", + "helm.sh/helm/v3/pkg/chartutil", + "helm.sh/helm/v3/pkg/cli", + "helm.sh/helm/v3/pkg/cli/values", + "helm.sh/helm/v3/pkg/getter", + "helm.sh/helm/v3/pkg/release", + "helm.sh/helm/v3/pkg/strvals", "k8s.io/api/admission/v1beta1", "k8s.io/api/admissionregistration/v1beta1", "k8s.io/api/apps/v1", @@ -2961,7 +3324,7 @@ "k8s.io/client-go/informers", "k8s.io/client-go/kubernetes", "k8s.io/client-go/kubernetes/fake", - "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1", + "k8s.io/client-go/kubernetes/typed/admissionregistration/v1", "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1", "k8s.io/client-go/kubernetes/typed/apps/v1", "k8s.io/client-go/kubernetes/typed/apps/v1beta1", @@ -2978,15 +3341,21 @@ "k8s.io/client-go/kubernetes/typed/batch/v1beta1", "k8s.io/client-go/kubernetes/typed/batch/v2alpha1", "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", + "k8s.io/client-go/kubernetes/typed/coordination/v1", "k8s.io/client-go/kubernetes/typed/coordination/v1beta1", "k8s.io/client-go/kubernetes/typed/core/v1", + "k8s.io/client-go/kubernetes/typed/discovery/v1alpha1", "k8s.io/client-go/kubernetes/typed/events/v1beta1", "k8s.io/client-go/kubernetes/typed/extensions/v1beta1", "k8s.io/client-go/kubernetes/typed/networking/v1", + "k8s.io/client-go/kubernetes/typed/networking/v1beta1", + "k8s.io/client-go/kubernetes/typed/node/v1alpha1", + "k8s.io/client-go/kubernetes/typed/node/v1beta1", "k8s.io/client-go/kubernetes/typed/policy/v1beta1", "k8s.io/client-go/kubernetes/typed/rbac/v1", "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1", "k8s.io/client-go/kubernetes/typed/rbac/v1beta1", + "k8s.io/client-go/kubernetes/typed/scheduling/v1", "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1", "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1", "k8s.io/client-go/kubernetes/typed/settings/v1alpha1", @@ -3003,21 +3372,16 @@ "k8s.io/client-go/util/cert", "k8s.io/client-go/util/flowcontrol", "k8s.io/client-go/util/homedir", - "k8s.io/helm/pkg/chartutil", - "k8s.io/helm/pkg/manifest", - "k8s.io/helm/pkg/proto/hapi/chart", - "k8s.io/helm/pkg/renderutil", - "k8s.io/helm/pkg/tiller", + "k8s.io/kubectl/pkg/cmd/util/editor", "k8s.io/kubernetes/pkg/apis/core", "k8s.io/kubernetes/pkg/apis/core/validation", - "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor", "k8s.io/utils/pointer", + "knative.dev/pkg/network", "knative.dev/serving/pkg/apis/networking/v1alpha1", "knative.dev/serving/pkg/client/clientset/versioned", "knative.dev/serving/pkg/client/clientset/versioned/typed/networking/v1alpha1", "knative.dev/serving/pkg/client/informers/externalversions", "knative.dev/serving/pkg/client/listers/networking/v1alpha1", - "knative.dev/serving/pkg/network", "sigs.k8s.io/yaml", ] solver-name = "gps-cdcl" diff --git a/Gopkg.toml b/Gopkg.toml index 88e839c4cde..eeea77270f3 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -1,3 +1,18 @@ +# This file remains temporarily because several libaries parse +# toml files and our cloudbuild setup depends on GOPATH. +# +# Gloo is currently building using go modules, however. We are +# actively working to rewrite our parsing libraries to use go +# modules and updating our CI to work outside of the GOPATH. + +ignored = [ +"github.com/Masterminds/semver/v3", +"github.com/Masterminds/sprig/v3", +"github.com/pierrec/lz4/v3", +"github.com/russross/blackfriday/v2", +"github.com/cespare/xxhash/v2", +] + [prune] go-tests = true unused-packages = true @@ -14,10 +29,6 @@ version = "1.3.0" name = "github.com/gogo/protobuf" -[[override]] - branch = "master" - name = "k8s.io/api" - [[override]] version = "1.3.1" name = "github.com/golang/protobuf" @@ -28,11 +39,20 @@ [[constraint]] name = "github.com/solo-io/solo-kit" - version = "0.11.12" + version = "0.11.13" + +[[override]] + name = "github.com/evanphx/json-patch" + version = "3.0.0" + +[[override]] + name = "helm.sh/helm/v3" + version = "3.0.0" + source = "https://github.com/helm/helm" [[override]] name = "github.com/solo-io/go-utils" - version = "0.10.25" + version = "0.11.0" [[constraint]] name = "github.com/hashicorp/consul" @@ -40,7 +60,7 @@ [[constraint]] name = "github.com/solo-io/reporting-client" - version = "0.1.1" + version = "0.1.2" [[constraint]] name = "github.com/onsi/gomega" @@ -55,54 +75,52 @@ [[override]] name = "k8s.io/kubernetes" - version = "=v1.13.1" + version = "v1.16.2" -[[constraint]] +[[override]] name = "k8s.io/api" - version = "kubernetes-1.13.1" + version = "kubernetes-1.16.2" + +[[constraint]] + name = "k8s.io/kubectl" + version = "kubernetes-1.16.2" [[override]] name = "k8s.io/client-go" - version = "kubernetes-1.13.1" + version = "kubernetes-1.16.2" [[override]] name = "k8s.io/apimachinery" - version = "kubernetes-1.13.1" + version = "kubernetes-1.16.2" [[override]] name = "k8s.io/apiextensions-apiserver" - version = "kubernetes-1.13.1" + version = "kubernetes-1.16.2" [[override]] name = "k8s.io/apiserver" - version = "kubernetes-1.13.1" + version = "kubernetes-1.16.2" [[override]] - name = "k8s.io/helm" - version = "v2.12.3" + name = "k8s.io/klog" + revision = "9cbb78b20423182f9e5b2a214dd255f5e117d2d1" + source = "github.com/stefanprodan/klog" [[override]] - name = "github.com/go-openapi/spec" - version = "0.19.2" + name = "k8s.io/utils" + revision = "6ca3b61696b65b0e81f1a39b4937fc2d2994ed6a" -[[constraint]] - name = "knative.dev/serving" - version = "v0.8.0" - -# added to support knative v0.8.0 [[override]] - name = "golang.org/x/net" - revision = "aaf60122140d3fcf75376d319f0554393160eb50" + name = "github.com/go-openapi/spec" + version = "0.19.2" -# added to support knative v0.8.0 [[override]] - name = "golang.org/x/xerrors" - revision = "a985d3407aa71f30cf86696ee0a2f409709f22e1" + name = "github.com/docker/docker" + revision = "be7ac8be2ae072032a4005e8f232be3fc57e4127" -[[override]] - name = "k8s.io/klog" - revision = "9cbb78b20423182f9e5b2a214dd255f5e117d2d1" - source = "github.com/stefanprodan/klog" +[[constraint]] + name = "knative.dev/serving" + version = "v0.10.0" [[constraint]] name = "github.com/spf13/viper" diff --git a/Makefile b/Makefile index b96954b83ed..ee8df62db13 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,8 @@ GLOOE_VERSION ?= 0.20.4 LDFLAGS := "-X github.com/solo-io/gloo/pkg/version.Version=$(VERSION) -X github.com/solo-io/gloo/pkg/version.EnterpriseTag=$(GLOOE_VERSION)" GCFLAGS := all="-N -l" +GO_BUILD_FLAGS := GO111MODULE=on CGO_ENABLED=0 GOARCH=amd64 + # Passed by cloudbuild GCLOUD_PROJECT_ID := $(GCLOUD_PROJECT_ID) BUILD_ID := $(BUILD_ID) @@ -73,7 +75,7 @@ update-deps: .PHONY: pin-repos pin-repos: - go run pin_repos.go + GO111MODULE=on go run pin_repos.go .PHONY: check-format check-format: @@ -108,8 +110,8 @@ generated-code: $(OUTPUT_DIR)/.generated-code verify-enterprise-protos update-li SUBDIRS:=$(shell ls -d -- */ | grep -v vendor) $(OUTPUT_DIR)/.generated-code: find . -name *.sk.md | xargs rm - rm docs/content/cli/glooctl*; go run projects/gloo/cli/cmd/docs/main.go - go generate ./... + rm docs/content/cli/glooctl*; GO111MODULE=on go run projects/gloo/cli/cmd/docs/main.go + GO111MODULE=on go generate ./... gofmt -w $(SUBDIRS) goimports -w $(SUBDIRS) mkdir -p $(OUTPUT_DIR) @@ -119,7 +121,7 @@ $(OUTPUT_DIR)/.generated-code: .PHONY: verify-enterprise-protos verify-enterprise-protos: @echo Verifying validity of generated enterprise files... - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build projects/gloo/pkg/api/v1/enterprise/verify.go + $(GO_BUILD_FLAGS) GOOS=linux go build projects/gloo/pkg/api/v1/enterprise/verify.go #---------------------------------------------------------------------------------- # Generate mocks @@ -159,16 +161,16 @@ generate-client-mocks: CLI_DIR=projects/gloo/cli $(OUTPUT_DIR)/glooctl: $(SOURCES) - go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go + GO111MODULE=on go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go $(OUTPUT_DIR)/glooctl-linux-amd64: $(SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go $(OUTPUT_DIR)/glooctl-darwin-amd64: $(SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=darwin go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=darwin go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go $(OUTPUT_DIR)/glooctl-windows-amd64.exe: $(SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=windows go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=windows go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CLI_DIR)/cmd/main.go .PHONY: glooctl @@ -191,7 +193,7 @@ GATEWAY_DIR=projects/gateway GATEWAY_SOURCES=$(call get_sources,$(GATEWAY_DIR)) $(OUTPUT_DIR)/gateway-linux-amd64: $(GATEWAY_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(GATEWAY_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(GATEWAY_DIR)/cmd/main.go .PHONY: gateway @@ -213,7 +215,7 @@ INGRESS_DIR=projects/ingress INGRESS_SOURCES=$(call get_sources,$(INGRESS_DIR)) $(OUTPUT_DIR)/ingress-linux-amd64: $(INGRESS_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(INGRESS_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(INGRESS_DIR)/cmd/main.go .PHONY: ingress @@ -235,7 +237,7 @@ ACCESS_LOG_DIR=projects/accesslogger ACCESS_LOG_SOURCES=$(call get_sources,$(ACCESS_LOG_DIR)) $(OUTPUT_DIR)/access-logger-linux-amd64: $(ACCESS_LOG_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(ACCESS_LOG_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(ACCESS_LOG_DIR)/cmd/main.go .PHONY: access-logger @@ -257,7 +259,7 @@ DISCOVERY_DIR=projects/discovery DISCOVERY_SOURCES=$(call get_sources,$(DISCOVERY_DIR)) $(OUTPUT_DIR)/discovery-linux-amd64: $(DISCOVERY_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(DISCOVERY_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(DISCOVERY_DIR)/cmd/main.go .PHONY: discovery @@ -279,7 +281,7 @@ GLOO_DIR=projects/gloo GLOO_SOURCES=$(call get_sources,$(GLOO_DIR)) $(OUTPUT_DIR)/gloo-linux-amd64: $(GLOO_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(GLOO_DIR)/cmd/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(GLOO_DIR)/cmd/main.go .PHONY: gloo @@ -302,7 +304,7 @@ ENVOYINIT_DIR=projects/envoyinit/cmd ENVOYINIT_SOURCES=$(call get_sources,$(ENVOYINIT_DIR)) $(OUTPUT_DIR)/envoyinit-linux-amd64: $(ENVOYINIT_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(ENVOYINIT_DIR)/main.go + $(GO_BUILD_FLAGS) GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(ENVOYINIT_DIR)/main.go .PHONY: envoyinit envoyinit: $(OUTPUT_DIR)/envoyinit-linux-amd64 @@ -326,7 +328,7 @@ CERTGEN_DIR=jobs/certgen/cmd CERTGEN_SOURCES=$(call get_sources,$(CERTGEN_DIR)) $(OUTPUT_DIR)/certgen-linux-amd64: $(CERTGEN_SOURCES) - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CERTGEN_DIR)/main.go + GO111MODULE=on CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags=$(LDFLAGS) -gcflags=$(GCFLAGS) -o $@ $(CERTGEN_DIR)/main.go .PHONY: certgen certgen: $(OUTPUT_DIR)/certgen-linux-amd64 @@ -357,14 +359,14 @@ HELM_DIR := install/helm INSTALL_NAMESPACE ?= gloo-system .PHONY: manifest -manifest: prepare-helm install/gloo-gateway.yaml install/gloo-knative.yaml update-helm-chart +manifest: prepare-helm install/gloo-gateway.yaml install/gloo-ingress.yaml install/gloo-knative.yaml update-helm-chart -# creates Chart.yaml, values.yaml, values-knative.yaml, values-ingress.yaml. See install/helm/gloo/README.md for more info. +# Creates Chart.yaml and values.yaml. See install/helm/gloo/README.md for more info. .PHONY: prepare-helm prepare-helm: $(OUTPUT_DIR)/.helm-prepared $(OUTPUT_DIR)/.helm-prepared: - go run install/helm/gloo/generate.go $(VERSION) + GO111MODULE=on go run install/helm/gloo/generate.go $(VERSION) touch $@ update-helm-chart: @@ -383,10 +385,12 @@ install/gloo-gateway.yaml: prepare-helm helm template install/helm/gloo $(HELMFLAGS) | tee $@ $(OUTPUT_YAML) $(MANIFEST_OUTPUT) install/gloo-knative.yaml: prepare-helm - helm template install/helm/gloo $(HELMFLAGS) --values install/helm/gloo/values-knative.yaml | tee $@ $(OUTPUT_YAML) $(MANIFEST_OUTPUT) + helm template install/helm/gloo $(HELMFLAGS) \ + --set gateway.enabled=false,settings.integrations.knative.enabled=true | tee $@ $(OUTPUT_YAML) $(MANIFEST_OUTPUT) install/gloo-ingress.yaml: prepare-helm - helm template install/helm/gloo $(HELMFLAGS) --values install/helm/gloo/values-ingress.yaml | tee $@ $(OUTPUT_YAML) $(MANIFEST_OUTPUT) + helm template install/helm/gloo $(HELMFLAGS) \ + --set gateway.enabled=false,ingress.enabled=true| tee $@ $(OUTPUT_YAML) $(MANIFEST_OUTPUT) .PHONY: render-yaml render-yaml: install/gloo-gateway.yaml install/gloo-knative.yaml install/gloo-ingress.yaml @@ -418,7 +422,7 @@ ASSETS_ONLY := false # The code does the proper checking for a TAGGED_VERSION .PHONY: upload-github-release-assets upload-github-release-assets: build-cli render-yaml - go run ci/upload_github_release_assets.go $(ASSETS_ONLY) + GO111MODULE=on go run ci/upload_github_release_assets.go $(ASSETS_ONLY) .PHONY: publish-docs publish-docs: prepare-helm @@ -540,14 +544,14 @@ certgen-docker-test: $(OUTPUT_DIR)/certgen-linux-amd64 $(OUTPUT_DIR)/Dockerfile. .PHONY: build-test-chart build-test-chart: mkdir -p $(TEST_ASSET_DIR) - go run install/helm/gloo/generate.go $(TEST_IMAGE_TAG) $(GCR_REPO_PREFIX) "Always" + GO111MODULE=on go run install/helm/gloo/generate.go $(TEST_IMAGE_TAG) $(GCR_REPO_PREFIX) "Always" helm package --destination $(TEST_ASSET_DIR) $(HELM_DIR)/gloo helm repo index $(TEST_ASSET_DIR) .PHONY: build-kind-chart build-kind-chart: mkdir -p $(TEST_ASSET_DIR) - go run install/helm/gloo/generate.go $(VERSION) + GO111MODULE=on go run install/helm/gloo/generate.go $(VERSION) helm package --destination $(TEST_ASSET_DIR) $(HELM_DIR)/gloo helm repo index $(TEST_ASSET_DIR) @@ -565,7 +569,7 @@ build-kind-chart: .PHONY: build-tagged-chart build-tagged-chart: mkdir -p $(TEST_ASSET_DIR) - go run install/helm/gloo/generate.go $(TAGGED_VERSION) $(GCR_REPO_PREFIX) "Always" + GO111MODULE=on go run install/helm/gloo/generate.go $(TAGGED_VERSION) $(GCR_REPO_PREFIX) "Always" mkdir -p $(HELM_SYNC_DIR)/charts helm package --destination $(HELM_SYNC_DIR)/charts $(HELM_DIR)/gloo helm repo index $(HELM_SYNC_DIR) @@ -584,4 +588,5 @@ fetch-tagged-helm: #---------------------------------------------------------------------------------- .PHONY: update-licenses update-licenses: - cd hack/utils/oss_compliance && go run main.go +# TODO(helm3): fix after we completely drop toml parsing in favor of go modules +# cd hack/utils/oss_compliance && GO111MODULE=on go run main.go diff --git a/changelog/v1.2.0/helm-3.yaml b/changelog/v1.2.0/helm-3.yaml new file mode 100644 index 00000000000..04825a9a970 --- /dev/null +++ b/changelog/v1.2.0/helm-3.yaml @@ -0,0 +1,86 @@ +changelog: +- type: NEW_FEATURE + description: The Gloo Helm chart is now compatible with [Helm 3](https://helm.sh/blog/helm-3-released/). + issueLink: https://github.com/solo-io/gloo/issues/1732 +- type: NEW_FEATURE + description: > + Refactor `glooctl` to make it compatible with the new Helm 3 chart format. `glooctl` now uses the new Helm 3 + libraries and delegates the `install` and `uninstall` operations to the corresponding Helm functions to provide + consistent behavior across different installation flows; for example, it is now possible to install Gloo using + `glooctl` and uninstall it using Helm, or vice-versa + issueLink: https://github.com/solo-io/gloo/issues/1732 +- type: HELM + description: > + Added `hook-delete-policy` to clean up the validation webhook certificate generation job after it has successfully + completed. + issueLink: https://github.com/solo-io/gloo/issues/1732 +- type: NEW_FEATURE + description: > + Deprecated the `installConfig.installationId` Helm value to track the resources that belong to a Gloo installation. + Helm keeps track of resources by storing release information in a Kubernetes Secret in the namespace Gloo was + installed in (this is the default with Helm 3 and can be changed via the `HELM_DRIVER` environment variable). + `glooctl install` and `glooctl uninstall` now take the same approach (under the hood the two commands now delegate + to their counterparts in the Helm 3 libraries). + issueLink: https://github.com/solo-io/gloo/issues/1635 +- type: NON_USER_FACING + description: Refactored Helm chart unit tests to avoid running `make manifest` out-process for each spec. + issueLink: https://github.com/solo-io/gloo/issues/1269 +- type: NEW_FEATURE + description: > + Helm users can now easily install Gloo in `ingress` or `knative` mode by using value overrides. The Gloo Helm chart + now packages a single values file instead of creating variants for `ingress` and `knative`. The values specific to + those two installation modes have been merged into the default `values.yaml`, where they will be ignored when those + two features are disabled (which is the default). To produce the manifests specific to the `ingress` and `knative` + installations, users can now just disable the gateway and enable the desired component via Helm value overrides. + issueLink: https://github.com/solo-io/gloo/issues/1732 +- type: NON_USER_FACING + description: > + Minimized the use of hooks in the Helm chart. Resources created as hooks are not managed as part of a release by Helm + (see [here](https://helm.sh/docs/topics/charts_hooks/#hook-resources-are-not-managed-with-corresponding-releases)) + and should therefore be used only when strictly necessary. + Not being considered part of a release, hooks will not be cleaned up when running `helm uninstall`. The documented + ways to get around this will not work for us though: we can't use `hook-delete-policy` since we have multiple hooks + that depend on each other (RBAC resources needed by the job), and we cannot write a job to clean them up, as this + this second job would in turn need dedicated RBAC resources, which need to be cleaned up, and so on. + To be able to clean up the hook resources related to the `certgen` Job, which are needed only temporarily during the + pre-install(upgrade) phase, we redefine them as `post-install(upgrade)` hooks with a `hook-delete-policy`. This way + Helm will reapply and immediately delete them after the installation (upgrade) completes. +- type: DEPENDENCY_BUMP + dependencyOwner: knative + dependencyRepo: serving + dependencyTag: v0.10.0 + description: Updated `knative/serving` to version 0.10.0. +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: go-utils + dependencyTag: v0.11.0 + description: Update go-util to version v0.11.0. +- type: DEPENDENCY_BUMP + dependencyOwner: solo-io + dependencyRepo: reporting-client + dependencyTag: v0.1.2 + description: Update reporting-client to version v0.1.2. +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: api + dependencyTag: kubernetes-1.16.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: client-go + dependencyTag: kubernetes-1.16.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: kubectl + dependencyTag: kubernetes-1.16.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apimachinery + dependencyTag: kubernetes-1.16.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apiextensions-apiserver + dependencyTag: kubernetes-1.16.2 +- type: DEPENDENCY_BUMP + dependencyOwner: k8s.io + dependencyRepo: apiserver + dependencyTag: kubernetes-1.16.2 \ No newline at end of file diff --git a/ci/check-code-and-docs-gen.sh b/ci/check-code-and-docs-gen.sh index defae84e2f4..bb20b08314b 100755 --- a/ci/check-code-and-docs-gen.sh +++ b/ci/check-code-and-docs-gen.sh @@ -9,6 +9,9 @@ if [ ! -f .gitignore ]; then fi git init +git config user.name "bot" +git config user.email "bot@solo.io" + git add . git commit -m "set up dummy repo for diffing" -q --allow-empty diff --git a/cloudbuild.yaml b/cloudbuild.yaml index d04607b4333..3e623bd8925 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -32,7 +32,7 @@ steps: # e2e-ginkgo is produced from https://github.com/solo-io/cloud-builders/e2e-ginkgo # Must set the GOPATH to tell the container the workspace has already been set up (by the dep step above) -- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.5' +- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.17' env: - 'PROJECT_ROOT=github.com/solo-io/gloo' - 'GOPATH=/workspace/gopath' @@ -84,7 +84,7 @@ steps: dir: './gopath/src/github.com/solo-io/gloo' waitFor: ['dep'] id: 'make-helm-dir' -- name: 'gcr.io/$PROJECT_ID/go-make:0.1.12' +- name: 'gcr.io/$PROJECT_ID/go-make:0.1.17' args: ['fetch-helm'] env: - 'PROJECT_ROOT=github.com/solo-io/gloo' @@ -95,7 +95,7 @@ steps: waitFor: ['dep'] # Docker related setup # grab this container immediately in parallel -- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.5' +- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.17' entrypoint: ls waitFor: ['-'] id: 'grab-ginkgo-container' @@ -106,7 +106,7 @@ steps: # run after dep so it doesn't move our settings waitFor: ['dep'] -- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.5' +- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.17' env: - 'PROJECT_ROOT=github.com/solo-io/gloo' - 'GOPATH=/workspace/gopath' @@ -134,7 +134,7 @@ steps: secretEnv: ['QUAY_IO_PASSWORD'] id: 'docker-login' waitFor: ['dep'] -- name: 'gcr.io/$PROJECT_ID/go-make:0.1.12' +- name: 'gcr.io/$PROJECT_ID/go-make:0.1.17' args: ['docker'] env: - 'PROJECT_ROOT=github.com/solo-io/gloo' @@ -147,7 +147,7 @@ steps: id: 'compile' # Run regression tests -- name: 'gcr.io/$PROJECT_ID/go-make:0.1.12' +- name: 'gcr.io/$PROJECT_ID/go-make:0.1.17' args: ['build-test-assets'] env: - 'PROJECT_ROOT=github.com/solo-io/gloo' @@ -159,7 +159,7 @@ steps: dir: './gopath/src/github.com/solo-io/gloo' waitFor: ['compile', 'docker-login', 'test'] id: 'build-test-assets' -- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.5' +- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.17' env: - 'PROJECT_ROOT=github.com/solo-io/gloo' - 'GOPATH=/workspace/gopath' @@ -177,7 +177,7 @@ steps: id: 'get-credentials' # wait for dep so our kube config is not moved. waitFor: ['set-zone', 'dep'] -- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.5' +- name: 'gcr.io/$PROJECT_ID/e2e-ginkgo:0.1.17' env: - 'KUBECONFIG=/workspace/kube-e2e' - 'PROJECT_ROOT=github.com/solo-io/gloo' @@ -192,7 +192,7 @@ steps: id: 'regression-tests-cluster-lock' # 1) Run make targets to push docker images -- name: 'gcr.io/$PROJECT_ID/go-make:0.1.12' +- name: 'gcr.io/$PROJECT_ID/go-make:0.1.17' args: ['docker-push'] env: - 'DOCKER_CONFIG=/workspace/docker-config' @@ -205,7 +205,7 @@ steps: id: 'release-images' # 2) Publish helm chart, compile manifests, produce release artifacts, deploy docs # isolating this portion of the release in order to force the manifest to be regenerated with the tagged version -- name: 'gcr.io/$PROJECT_ID/go-make:0.1.12' +- name: 'gcr.io/$PROJECT_ID/go-make:0.1.17' args: ['manifest', 'upload-github-release-assets', 'download-glooe-changelog', 'publish-docs', '-B'] env: - 'TAGGED_VERSION=$TAG_NAME' @@ -217,7 +217,7 @@ steps: secretEnv: ['GITHUB_TOKEN'] id: 'release-chart' # 3) Sync helm chart data back to google storage bucket -- name: 'gcr.io/$PROJECT_ID/go-make:0.1.12' +- name: 'gcr.io/$PROJECT_ID/go-make:0.1.17' args: ['save-helm'] env: - 'PROJECT_ROOT=github.com/solo-io/gloo' diff --git a/docs/content/advanced_configuration/fds_mode.md b/docs/content/advanced_configuration/fds_mode.md index 70bb2cc2453..2fbaf473501 100644 --- a/docs/content/advanced_configuration/fds_mode.md +++ b/docs/content/advanced_configuration/fds_mode.md @@ -33,7 +33,7 @@ FDS can run in one of 3 modes: * `BLACKLIST`: The most liberal FDS polling policy. Using this mode, FDS will poll any service unless its namespace or the service itself is explicitly blacklisted. * `WHITELIST`: A more restricted FDS polling policy. Using this mode, FDS will poll only those services who either live in an explicitly whitelisted namespace, or themselves are are explicitly whitelisted. *`WHITELIST` is the default mode for FDS*. -* `DISABLED`: FDS will not run. Upsrteam Discovery (UDS) will still run as normal. +* `DISABLED`: FDS will not run. **Upstream Discovery Service** (UDS) will still run as normal. Setting the `fdsMode` can be done either via the Helm Chart, or by directly modifying the `default` `gloo.solo.io/v1.Settings` custom resource in Gloo's installation namespace (`gloo-system`). diff --git a/docs/content/cli/glooctl_install.md b/docs/content/cli/glooctl_install.md index d4e90843ca3..d5baee1f2fb 100644 --- a/docs/content/cli/glooctl_install.md +++ b/docs/content/cli/glooctl_install.md @@ -13,8 +13,15 @@ choose which version of Gloo to install. ### Options ``` - -h, --help help for install - -v, --verbose If true, output from kubectl commands will print to stdout/stderr + -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes + -f, --file string Install Gloo from this Helm chart archive file rather than from a release + -h, --help help for install + -n, --namespace string namespace to install gloo into (default "gloo-system") + --release-name string helm release name (default "gloo") + -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo + --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) + -v, --verbose If true, output from kubectl commands will print to stdout/stderr + --with-admin-console install gloo and a read-only version of its admin console ``` ### Options inherited from parent commands @@ -28,7 +35,7 @@ choose which version of Gloo to install. ### SEE ALSO * [glooctl](../glooctl) - CLI for Gloo -* [glooctl install gateway](../glooctl_install_gateway) - install the Gloo Gateway on kubernetes -* [glooctl install ingress](../glooctl_install_ingress) - install the Gloo Ingress Controller on kubernetes -* [glooctl install knative](../glooctl_install_knative) - install Knative with Gloo on kubernetes +* [glooctl install gateway](../glooctl_install_gateway) - install the Gloo Gateway on Kubernetes +* [glooctl install ingress](../glooctl_install_ingress) - install the Gloo Ingress Controller on Kubernetes +* [glooctl install knative](../glooctl_install_knative) - install Knative with Gloo on Kubernetes diff --git a/docs/content/cli/glooctl_install_gateway.md b/docs/content/cli/glooctl_install_gateway.md index fe47a3e0096..c12e82427e2 100644 --- a/docs/content/cli/glooctl_install_gateway.md +++ b/docs/content/cli/glooctl_install_gateway.md @@ -4,7 +4,7 @@ weight: 5 --- ## glooctl install gateway -install the Gloo Gateway on kubernetes +install the Gloo Gateway on Kubernetes ### Synopsis @@ -17,26 +17,27 @@ glooctl install gateway [flags] ### Options ``` - -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes - -f, --file string Install Gloo from this Helm chart archive file rather than from a release - -h, --help help for gateway - -n, --namespace string namespace to install gloo into (default "gloo-system") - -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo - --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) - --with-admin-console install gloo and a read-only version of its admin console + -h, --help help for gateway ``` ### Options inherited from parent commands ``` - -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") - -i, --interactive use interactive mode - --kubeconfig string kubeconfig to use, if not standard one - -v, --verbose If true, output from kubectl commands will print to stdout/stderr + -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") + -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes + -f, --file string Install Gloo from this Helm chart archive file rather than from a release + -i, --interactive use interactive mode + --kubeconfig string kubeconfig to use, if not standard one + -n, --namespace string namespace to install gloo into (default "gloo-system") + --release-name string helm release name (default "gloo") + -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo + --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) + -v, --verbose If true, output from kubectl commands will print to stdout/stderr + --with-admin-console install gloo and a read-only version of its admin console ``` ### SEE ALSO * [glooctl install](../glooctl_install) - install gloo on different platforms -* [glooctl install gateway enterprise](../glooctl_install_gateway_enterprise) - install the Gloo Enterprise Gateway on kubernetes +* [glooctl install gateway enterprise](../glooctl_install_gateway_enterprise) - install the Gloo Enterprise Gateway on Kubernetes diff --git a/docs/content/cli/glooctl_install_gateway_enterprise.md b/docs/content/cli/glooctl_install_gateway_enterprise.md index fb74b36e9ec..d5949d82275 100644 --- a/docs/content/cli/glooctl_install_gateway_enterprise.md +++ b/docs/content/cli/glooctl_install_gateway_enterprise.md @@ -4,7 +4,7 @@ weight: 5 --- ## glooctl install gateway enterprise -install the Gloo Enterprise Gateway on kubernetes +install the Gloo Enterprise Gateway on Kubernetes ### Synopsis @@ -24,19 +24,20 @@ glooctl install gateway enterprise [flags] ### Options inherited from parent commands ``` - -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") - -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes - -f, --file string Install Gloo from this Helm chart archive file rather than from a release - -i, --interactive use interactive mode - --kubeconfig string kubeconfig to use, if not standard one - -n, --namespace string namespace to install gloo into (default "gloo-system") - -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo - --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) - -v, --verbose If true, output from kubectl commands will print to stdout/stderr - --with-admin-console install gloo and a read-only version of its admin console + -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") + -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes + -f, --file string Install Gloo from this Helm chart archive file rather than from a release + -i, --interactive use interactive mode + --kubeconfig string kubeconfig to use, if not standard one + -n, --namespace string namespace to install gloo into (default "gloo-system") + --release-name string helm release name (default "gloo") + -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo + --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) + -v, --verbose If true, output from kubectl commands will print to stdout/stderr + --with-admin-console install gloo and a read-only version of its admin console ``` ### SEE ALSO -* [glooctl install gateway](../glooctl_install_gateway) - install the Gloo Gateway on kubernetes +* [glooctl install gateway](../glooctl_install_gateway) - install the Gloo Gateway on Kubernetes diff --git a/docs/content/cli/glooctl_install_ingress.md b/docs/content/cli/glooctl_install_ingress.md index a5f891bf64b..3e8d81c5a8d 100644 --- a/docs/content/cli/glooctl_install_ingress.md +++ b/docs/content/cli/glooctl_install_ingress.md @@ -4,7 +4,7 @@ weight: 5 --- ## glooctl install ingress -install the Gloo Ingress Controller on kubernetes +install the Gloo Ingress Controller on Kubernetes ### Synopsis @@ -17,22 +17,23 @@ glooctl install ingress [flags] ### Options ``` - -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes - -f, --file string Install Gloo from this Helm chart archive file rather than from a release - -h, --help help for ingress - -n, --namespace string namespace to install gloo into (default "gloo-system") - -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo - --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) - --with-admin-console install gloo and a read-only version of its admin console + -h, --help help for ingress ``` ### Options inherited from parent commands ``` - -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") - -i, --interactive use interactive mode - --kubeconfig string kubeconfig to use, if not standard one - -v, --verbose If true, output from kubectl commands will print to stdout/stderr + -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") + -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes + -f, --file string Install Gloo from this Helm chart archive file rather than from a release + -i, --interactive use interactive mode + --kubeconfig string kubeconfig to use, if not standard one + -n, --namespace string namespace to install gloo into (default "gloo-system") + --release-name string helm release name (default "gloo") + -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo + --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) + -v, --verbose If true, output from kubectl commands will print to stdout/stderr + --with-admin-console install gloo and a read-only version of its admin console ``` ### SEE ALSO diff --git a/docs/content/cli/glooctl_install_knative.md b/docs/content/cli/glooctl_install_knative.md index 0f830012d10..7d0a6a5f4d5 100644 --- a/docs/content/cli/glooctl_install_knative.md +++ b/docs/content/cli/glooctl_install_knative.md @@ -4,7 +4,7 @@ weight: 5 --- ## glooctl install knative -install Knative with Gloo on kubernetes +install Knative with Gloo on Kubernetes ### Synopsis @@ -17,28 +17,29 @@ glooctl install knative [flags] ### Options ``` - -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes - -f, --file string Install Gloo from this Helm chart archive file rather than from a release -h, --help help for knative -e, --install-eventing Bundle Knative-Eventing with your Gloo installation. Requires install-knative to be true --install-eventing-version true Version of Knative Eventing to install, when --install-eventing is set to true (default "0.10.0") -k, --install-knative Bundle Knative-Serving with your Gloo installation (default true) --install-knative-version true Version of Knative Serving to install, when --install-knative is set to true. This version will also be used to install Knative Monitoring, --install-monitoring is set (default "0.10.0") -m, --install-monitoring Bundle Knative-Monitoring with your Gloo installation. Requires install-knative to be true - -n, --namespace string namespace to install gloo into (default "gloo-system") -g, --skip-installing-gloo Skip installing Gloo. Only Knative components will be installed - -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo - --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) - --with-admin-console install gloo and a read-only version of its admin console ``` ### Options inherited from parent commands ``` - -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") - -i, --interactive use interactive mode - --kubeconfig string kubeconfig to use, if not standard one - -v, --verbose If true, output from kubectl commands will print to stdout/stderr + -c, --config string set the path to the glooctl config file (default "/.gloo/glooctl-config.yaml") + -d, --dry-run Dump the raw installation yaml instead of applying it to kubernetes + -f, --file string Install Gloo from this Helm chart archive file rather than from a release + -i, --interactive use interactive mode + --kubeconfig string kubeconfig to use, if not standard one + -n, --namespace string namespace to install gloo into (default "gloo-system") + --release-name string helm release name (default "gloo") + -u, --upgrade Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo + --values strings List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2) + -v, --verbose If true, output from kubectl commands will print to stdout/stderr + --with-admin-console install gloo and a read-only version of its admin console ``` ### SEE ALSO diff --git a/docs/content/cli/glooctl_uninstall.md b/docs/content/cli/glooctl_uninstall.md index 7580a637bfb..d18c365c9c9 100644 --- a/docs/content/cli/glooctl_uninstall.md +++ b/docs/content/cli/glooctl_uninstall.md @@ -17,13 +17,13 @@ glooctl uninstall [flags] ### Options ``` - --all Deletes all gloo resources, including the namespace, crds, and cluster role - --delete-crds Delete all gloo crds (all custom gloo objects will be deleted) - --delete-namespace Delete the namespace (all objects written to this namespace will be deleted) - --force Uninstalls Gloo even if the installation ID cannot be determined from the gloo pod labels (using this may delete cluster-scoped resources belonging to other Gloo installations) - -h, --help help for uninstall - -n, --namespace string namespace in which Gloo is installed (default "gloo-system") - -v, --verbose If true, output from kubectl commands will print to stdout/stderr + --all Deletes all gloo resources, including the namespace, crds, and cluster role + --delete-crds Delete all gloo crds (all custom gloo objects will be deleted) + --delete-namespace Delete the namespace (all objects written to this namespace will be deleted) + -h, --help help for uninstall + -n, --namespace string namespace in which Gloo is installed (default "gloo-system") + --release-name string helm release name (default "gloo") + -v, --verbose If true, output from kubectl commands will print to stdout/stderr ``` ### Options inherited from parent commands diff --git a/docs/content/installation/gateway/kubernetes/values.txt b/docs/content/installation/gateway/kubernetes/values.txt index fe8a0c2604d..52008b52808 100755 --- a/docs/content/installation/gateway/kubernetes/values.txt +++ b/docs/content/installation/gateway/kubernetes/values.txt @@ -1,20 +1,19 @@ |Option|Type|Default Value|Description| |------|----|-----------|-------------| |namespace.create|bool|false|create the installation namespace| -|crds.create|bool|true|create CRDs for Gloo (turn off if installing with Helm to a cluster that already has Gloo CRDs)| |settings.watchNamespaces[]|string||whitelist of namespaces for gloo to watch for services and CRDs. Empty list means all namespaces| |settings.writeNamespace|string||namespace where intermediary CRDs will be written to, e.g. Upstreams written by Gloo Discovery.| |settings.integrations.knative.enabled|bool|false|enabled knative components| -|settings.integrations.knative.version|string||the version of knative installed to the cluster. if using version < 0.8.0, gloo will use Knative's ClusterIngress API for configuration rather than the namespace-scoped Ingress| -|settings.integrations.knative.proxy.image.tag|string||tag for the container| -|settings.integrations.knative.proxy.image.repository|string||image name (repository) for the container.| +|settings.integrations.knative.version|string|0.10.0|the version of knative installed to the cluster. if using version < 0.8.0, gloo will use Knative's ClusterIngress API for configuration rather than the namespace-scoped Ingress| +|settings.integrations.knative.proxy.image.tag|string||tag for the container| +|settings.integrations.knative.proxy.image.repository|string|gloo-envoy-wrapper|image name (repository) for the container.| |settings.integrations.knative.proxy.image.registry|string||image prefix/registry e.g. (quay.io/solo-io)| |settings.integrations.knative.proxy.image.pullPolicy|string||image pull policy for the container| |settings.integrations.knative.proxy.image.pullSecret|string||image pull policy for the container | -|settings.integrations.knative.proxy.httpPort|int||HTTP port for the proxy| -|settings.integrations.knative.proxy.httpsPort|int||HTTPS port for the proxy| +|settings.integrations.knative.proxy.httpPort|int|80|HTTP port for the proxy| +|settings.integrations.knative.proxy.httpsPort|int|443|HTTPS port for the proxy| |settings.integrations.knative.proxy.tracing|string||tracing configuration| -|settings.integrations.knative.proxy.replicas|int||number of instances to deploy| +|settings.integrations.knative.proxy.replicas|int|1|number of instances to deploy| |settings.integrations.knative.proxy.resources.limits.memory|string||amount of memory| |settings.integrations.knative.proxy.resources.limits.cpu|string||amount of CPUs| |settings.integrations.knative.proxy.resources.requests.memory|string||amount of memory| @@ -56,7 +55,7 @@ |discovery.deployment.resources.limits.cpu|string||amount of CPUs| |discovery.deployment.resources.requests.memory|string||amount of memory| |discovery.deployment.resources.requests.cpu|string||amount of CPUs| -|discovery.fdsMode|string||mode for function discovery (blacklist or whitelist). See more info in the settings docs| +|discovery.fdsMode|string|WHITELIST|mode for function discovery (blacklist or whitelist). See more info in the settings docs| |discovery.enabled|bool|true|enable Discovery features| |gateway.enabled|bool|true|enable Gloo API Gateway features| |gateway.validation.enabled|bool|true|enable Gloo API Gateway validation hook (default true)| @@ -87,7 +86,7 @@ |gateway.certGenJob.ttlSecondsAfterFinished|int|60|Clean up the finished job after this many seconds. Defaults to 60| |gateway.updateValues|bool|false|if true, will use a provided helm helper 'gloo.updatevalues' to update values during template render - useful for plugins/extensions| |gateway.proxyServiceAccount.disableAutomount|bool|false|disable automunting the service account to the gateway proxy. not mounting the token hardens the proxy container, but may interfere with service mesh integrations| -|gateway.readGatewaysFromAllNamespaces|bool|false|if true, read Gateway CRDs from all watched namespaces rather than just the namespace of the Gateway controller| +|gateway.readGatewaysFromAllNamespaces|bool|false|if true, read Gateway custom resources from all watched namespaces rather than just the namespace of the Gateway controller| |gatewayProxies.NAME.kind.deployment.replicas|int||number of instances to deploy| |gatewayProxies.NAME.kind.deployment.resources.limits.memory|string||amount of memory| |gatewayProxies.NAME.kind.deployment.resources.limits.cpu|string||amount of CPUs| @@ -191,27 +190,27 @@ |gatewayProxies.gatewayProxy.stats|bool|true|enable prometheus stats| |gatewayProxies.gatewayProxy.readConfig|bool|false|expose a read-only subset of the envoy admin api| |ingress.enabled|bool|false|| -|ingress.deployment.image.tag|string||tag for the container| -|ingress.deployment.image.repository|string||image name (repository) for the container.| +|ingress.deployment.image.tag|string||tag for the container| +|ingress.deployment.image.repository|string|ingress|image name (repository) for the container.| |ingress.deployment.image.registry|string||image prefix/registry e.g. (quay.io/solo-io)| |ingress.deployment.image.pullPolicy|string||image pull policy for the container| |ingress.deployment.image.pullSecret|string||image pull policy for the container | -|ingress.deployment.replicas|int||number of instances to deploy| +|ingress.deployment.replicas|int|1|number of instances to deploy| |ingress.deployment.resources.limits.memory|string||amount of memory| |ingress.deployment.resources.limits.cpu|string||amount of CPUs| |ingress.deployment.resources.requests.memory|string||amount of memory| |ingress.deployment.resources.requests.cpu|string||amount of CPUs| |ingress.requireIngressClass|bool||only serve traffic for Ingress objects with the annotation 'kubernetes.io/ingress.class: gloo''| -|ingressProxy.deployment.image.tag|string||tag for the container| -|ingressProxy.deployment.image.repository|string||image name (repository) for the container.| +|ingressProxy.deployment.image.tag|string||tag for the container| +|ingressProxy.deployment.image.repository|string|gloo-envoy-wrapper|image name (repository) for the container.| |ingressProxy.deployment.image.registry|string||image prefix/registry e.g. (quay.io/solo-io)| |ingressProxy.deployment.image.pullPolicy|string||image pull policy for the container| |ingressProxy.deployment.image.pullSecret|string||image pull policy for the container | -|ingressProxy.deployment.httpPort|int||HTTP port for the ingress container| -|ingressProxy.deployment.httpsPort|int||HTTPS port for the ingress container| +|ingressProxy.deployment.httpPort|int|80|HTTP port for the ingress container| +|ingressProxy.deployment.httpsPort|int|443|HTTPS port for the ingress container| |ingressProxy.deployment.extraPorts[]|interface||| |ingressProxy.deployment.extraAnnotations.NAME|string||| -|ingressProxy.deployment.replicas|int||number of instances to deploy| +|ingressProxy.deployment.replicas|int|1|number of instances to deploy| |ingressProxy.deployment.resources.limits.memory|string||amount of memory| |ingressProxy.deployment.resources.limits.cpu|string||amount of CPUs| |ingressProxy.deployment.resources.requests.memory|string||amount of memory| @@ -241,4 +240,3 @@ |global.glooRbac.create|bool|true|create rbac rules for the gloo-system service account| |global.glooRbac.namespaced|bool|false|use Roles instead of ClusterRoles| |global.glooRbac.nameSuffix|string||When nameSuffix is nonempty, append '-$nameSuffix' to the names of Gloo RBAC resources; e.g. when nameSuffix is 'foo', the role 'gloo-resource-reader' will become 'gloo-resource-reader-foo'| -|global.glooInstallationId|string||If not user-defined, will default to a random string. Used to track all the resources created in one installation to assist with uninstalling| diff --git a/go.mod b/go.mod new file mode 100644 index 00000000000..93b1cc71504 --- /dev/null +++ b/go.mod @@ -0,0 +1,133 @@ +module github.com/solo-io/gloo + +go 1.12 + +require ( + cloud.google.com/go v0.45.1 // indirect + contrib.go.opencensus.io/exporter/stackdriver v0.12.5 // indirect + github.com/Azure/go-autorest v12.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest/adal v0.8.0 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.4.0 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect + github.com/Netflix/go-expect v0.0.0-20180928190340-9d1f4485533b + github.com/avast/retry-go v2.4.3+incompatible + github.com/aws/aws-sdk-go v1.25.44 + github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/cratonica/2goarray v0.0.0-20190331194516-514510793eaa // indirect + github.com/docker/docker v1.13.1 // indirect + github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f // indirect + github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f // indirect + github.com/envoyproxy/go-control-plane v0.9.1 + github.com/envoyproxy/protoc-gen-validate v0.1.0 + github.com/fgrosse/zaptest v1.1.0 + github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 + github.com/go-openapi/loads v0.19.4 + github.com/go-openapi/spec v0.19.4 + github.com/go-openapi/swag v0.19.5 + github.com/go-swagger/go-swagger v0.21.0 + github.com/gogo/googleapis v1.3.0 + github.com/gogo/protobuf v1.3.1 + github.com/golang/mock v1.3.1 + github.com/golang/protobuf v1.3.2 + github.com/google/go-containerregistry v0.0.0-20191202175804-2ce3ea99b462 // indirect + github.com/google/go-github v17.0.0+incompatible + github.com/gophercloud/gophercloud v0.6.0 // indirect + github.com/gorilla/mux v1.7.3 + github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 + github.com/hashicorp/consul v1.5.2 // indirect + github.com/hashicorp/consul/api v1.1.0 + github.com/hashicorp/go-multierror v1.0.0 + github.com/hashicorp/go-uuid v1.0.1 + github.com/hashicorp/vault v1.2.0 // indirect + github.com/hashicorp/vault/api v1.0.5-0.20190730042357-746c0b111519 + github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c + github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 // indirect + github.com/ilackarms/protoc-gen-doc v1.0.0 // indirect + github.com/ilackarms/protokit v0.0.0-20181231193355-ee2393f3bbf0 // indirect + github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf + github.com/jhump/protoreflect v1.5.0 + github.com/k0kubun/pp v2.3.0+incompatible + github.com/kelseyhightower/envconfig v1.4.0 + github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 + github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a // indirect + github.com/mitchellh/hashstructure v1.0.0 + github.com/olekukonko/tablewriter v0.0.3 + github.com/onsi/ginkgo v1.10.1 + github.com/onsi/gomega v1.7.1 + github.com/pkg/errors v0.8.1 + github.com/prometheus/client_golang v1.2.1 + github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 + github.com/prometheus/prometheus v2.5.0+incompatible + github.com/prometheus/tsdb v0.10.0 // indirect + github.com/pseudomuto/protoc-gen-doc v1.0.0 // indirect + github.com/radovskyb/watcher v1.0.7 // indirect + github.com/solo-io/envoy-operator v0.1.1 + github.com/solo-io/go-list-licenses v0.0.0-20191023220251-171e4740d00f + github.com/solo-io/go-utils v0.11.0 + github.com/solo-io/reporting-client v0.1.2 + github.com/solo-io/solo-kit v0.11.13 + github.com/spf13/afero v1.2.2 + github.com/spf13/cobra v0.0.5 + github.com/spf13/pflag v1.0.5 + github.com/spf13/viper v1.5.0 + go.opencensus.io v0.22.2 + go.uber.org/multierr v1.4.0 + go.uber.org/zap v1.13.0 + golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd // indirect + golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e + golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e // indirect + golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe // indirect + google.golang.org/api v0.10.0 + google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11 + google.golang.org/grpc v1.25.1 + gopkg.in/AlecAivazis/survey.v1 v1.8.7 + gopkg.in/yaml.v2 v2.2.4 + helm.sh/helm/v3 v3.0.0 + k8s.io/api v0.0.0 + k8s.io/apiextensions-apiserver v0.0.0 + k8s.io/apimachinery v0.0.0 + k8s.io/client-go v11.0.0+incompatible + k8s.io/kubectl v0.0.0 + k8s.io/kubernetes v1.16.2 + k8s.io/utils v0.0.0-20191114184206-e782cd3c129f + knative.dev/pkg v0.0.0-20191203174735-3444316bdeef + knative.dev/serving v0.10.0 + sigs.k8s.io/yaml v1.1.0 +) + +replace ( + github.com/Sirupsen/logrus => github.com/sirupsen/logrus v1.4.2 + github.com/docker/docker => github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309 + k8s.io/api => k8s.io/api v0.0.0-20191004120104-195af9ec3521 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.0.0-20191204090712-e0e829f17bab + k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20191028221656-72ed19daf4bb + k8s.io/apiserver => k8s.io/apiserver v0.0.0-20191109104512-b243870e034b + k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20191004123735-6bff60de4370 + k8s.io/client-go => k8s.io/client-go v0.0.0-20191016111102-bec269661e48 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.0.0-20191004125000-f72359dfc58e + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.0.0-20191004124811-493ca03acbc1 + k8s.io/code-generator => k8s.io/code-generator v0.0.0-20191004115455-8e001e5d1894 + k8s.io/component-base => k8s.io/component-base v0.0.0-20191004121439-41066ddd0b23 + k8s.io/cri-api => k8s.io/cri-api v0.0.0-20190828162817-608eb1dad4ac + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.0.0-20191004125145-7118cc13aa0a + k8s.io/gengo => k8s.io/gengo v0.0.0-20190822140433-26a664648505 + k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1 + k8s.io/klog => k8s.io/klog v0.4.0 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.0.0-20191104231939-9e18019dec40 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.0.0-20191004124629-b9859bb1ce71 + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf + k8s.io/kube-proxy => k8s.io/kube-proxy v0.0.0-20191004124112-c4ee2f9e1e0a + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.0.0-20191004124444-89f3bbd82341 + k8s.io/kubectl => k8s.io/kubectl v0.0.0-20191004125858-14647fd13a8b + k8s.io/kubelet => k8s.io/kubelet v0.0.0-20191004124258-ac1ea479bd3a + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20191203122058-2ae7e9ca8470 + k8s.io/metrics => k8s.io/metrics v0.0.0-20191004123543-798934cf5e10 + k8s.io/node-api => k8s.io/node-api v0.0.0-20191004125527-f5592a7bd6b6 + k8s.io/repo-infra => k8s.io/repo-infra v0.0.0-20181204233714-00fe14e3d1a3 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.0.0-20191028231949-ceef03da3009 + k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.0.0-20191004123926-88de2937c61b + k8s.io/sample-controller => k8s.io/sample-controller v0.0.0-20191004122958-d040c2be0d0b + k8s.io/utils => k8s.io/utils v0.0.0-20190801114015-581e00157fb1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000000..d1dddf07af3 --- /dev/null +++ b/go.sum @@ -0,0 +1,1826 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= +cloud.google.com/go v0.40.0 h1:FjSY7bOj+WzJe6TZRVtXI2b9kAYvtNg4lMbcH2+MUkk= +cloud.google.com/go v0.40.0/go.mod h1:Tk58MuI9rbLMKlAjeO/bDnteAx7tX2gJIXw4T5Jwlro= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1 h1:lRi0CHyU+ytlvylOlFKKq0af6JncuyoRh1J+QJBqQx0= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f h1:UrKzEwTgeiff9vxdrfdqxibzpWjxLnuXDI5m6z3GJAk= +code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= +contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA= +contrib.go.opencensus.io/exporter/prometheus v0.1.0 h1:SByaIoWwNgMdPSgl5sMqM2KDE5H/ukPWBRo314xiDvg= +contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= +contrib.go.opencensus.io/exporter/stackdriver v0.12.5 h1:roYxbw//uT5VGVKwTutsI/RShEO11XY8nBOetZEzihI= +contrib.go.opencensus.io/exporter/stackdriver v0.12.5/go.mod h1:8x999/OcIPy5ivx/wDiV7Gx4D+VUPODf0mWRGRc5kSk= +contrib.go.opencensus.io/exporter/stackdriver v0.12.8 h1:iXI5hr7pUwMx0IwMphpKz5Q3If/G5JiWFVZ5MPPxP9E= +contrib.go.opencensus.io/exporter/stackdriver v0.12.8/go.mod h1:XyyafDnFOsqoxHJgTFycKZMrRUrPThLh2iYTJF6uoO0= +git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/Azure/azure-sdk-for-go v16.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v19.1.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v21.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v32.5.0+incompatible h1:Hn/DsObfmw0M7dMGS/c0MlVrJuGFzHzOpBWL89acR68= +github.com/Azure/azure-sdk-for-go v32.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-autorest v10.7.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v10.15.3+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v10.15.5+incompatible h1:vdxx6wM1rVkKt/3niByPVjguoLWkWImOcJNvEykgBzY= +github.com/Azure/go-autorest v10.15.5+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v11.7.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v12.2.0+incompatible h1:2Fxszbg492oAJrcvJlgyVaTqnQYRkxmEK6VPCLLVpBI= +github.com/Azure/go-autorest v12.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v13.3.0+incompatible h1:8Ix0VdeOllBx9jEcZ2Wb1uqWUpE1awmJiaHztwaJCPk= +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.2 h1:6AWuh3uWrsZJcNoCHrCF/+g4aKPCU39kaMO6/qrnK/4= +github.com/Azure/go-autorest/autorest v0.9.2/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.6.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.7.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.8.0 h1:CxTzQrySOxDnKpLjFJeZAS5Qrv/qFPkgLjx5bOAi//I= +github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.0 h1:18ld/uw9Rr7VkNie7a7RMAcFIWrJdlUL59TWGfcu530= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.0/go.mod h1:Oo5cRhLvZteXzI2itUm5ziqsoIxRkzrt3t61FeZaS18= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.0 h1:5PAqnv+CSTwW9mlZWZAizmzrazFWEgZykEZXpr2hDtY= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.0/go.mod h1:rNYMNAefZMRowqCV0cVhr/YDW5dD7afFq9nXAXL4ykE= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.2.0 h1:nQOZzFCudTh+TvquAtCRjM01VEYx85e9qbwt5ncW4L8= +github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/validation v0.1.0 h1:ISSNzGUh+ZSzizJWOWzs8bwpXIePbGLW4z/AmUFGH5A= +github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20181220005116-f8e995905100/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/Jeffail/gabs v1.1.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= +github.com/Jeffail/gabs v1.1.1 h1:V0uzR08Hj22EX8+8QMhyI9sX2hwRu+/RJhJUmnwda/E= +github.com/Jeffail/gabs v1.1.1/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e h1:eb0Pzkt15Bm7f2FFYv7sjY7NPFi3cPkS3tv1CcrFBWA= +github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.0.1 h1:2kKm5lb7dKVrt5TYUiAavE6oFc1cFT0057UVGT+JqLk= +github.com/Masterminds/semver/v3 v3.0.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig/v3 v3.0.0 h1:KSQz7Nb08/3VU9E4ns29dDxcczhOD1q7O1UfM4G3t3g= +github.com/Masterminds/sprig/v3 v3.0.0/go.mod h1:NEUY/Qq8Gdm2xgYA+NwJM6wmfdRV9xkh8h/Rld20R0U= +github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= +github.com/Microsoft/go-winio v0.4.3/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc= +github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/hcsshim v0.0.0-20190417211021-672e52e9209d/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.6 h1:ZfF0+zZeYdzMIVMZHKtDKJvLHj76XCuVae/jNkjj0IA= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= +github.com/Netflix/go-expect v0.0.0-20180928190340-9d1f4485533b h1:sSQK05nvxs4UkgCJaxihteu+r+6ela3dNMm7NVmsS3c= +github.com/Netflix/go-expect v0.0.0-20180928190340-9d1f4485533b/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg= +github.com/SAP/go-hdb v0.12.0/go.mod h1:etBT+FAi1t5k3K3tf5vQTnosgYmhDkRi8jEnQqCnxF0= +github.com/SAP/go-hdb v0.14.1 h1:hkw4ozGZ/i4eak7ZuGkY5e0hxiXFdNUBNhr4AvZVNFE= +github.com/SAP/go-hdb v0.14.1/go.mod h1:7fdQLVC2lER3urZLjZCm0AuMQfApof92n3aylBPEkMo= +github.com/SermoDigital/jose v0.0.0-20180104203859-803625baeddc/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= +github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/airbrake/gobrake v3.6.1+incompatible/go.mod h1:wM4gu3Cn0W0K7GUuVWnlXZU11AGBXMILnrdOU8Kn00o= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190412020505-60e2075261b6/go.mod h1:T9M45xf79ahXVelWoOBmH0y4aC1t5kXO5BxwyakgIGA= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f h1:oRD16bhpKNAanfcDDVU+J0NXqsgHIvGbbe/sy+r6Rs0= +github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= +github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5 h1:nWDRPCyCltiTsANwC/n3QZH7Vww33Npq9MKqlwRzI/c= +github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apple/foundationdb/bindings/go v0.0.0-20190411004307-cd5c9d91fad2 h1:VoHKYIXEQU5LWoambPBOvYxyLqZYHuj+rj5DVnMUc3k= +github.com/apple/foundationdb/bindings/go v0.0.0-20190411004307-cd5c9d91fad2/go.mod h1:OMVSB21p9+xQUIqlGizHPZfjK+SHws1ht+ZytVDoz9U= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM= +github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg= +github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e h1:h0gP0hBU6DsA5IQduhLWGOEfIUKzJS5hhXQBSgHuF/g= +github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20180319081651-7d2e70ef918f/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/avast/retry-go v2.2.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= +github.com/avast/retry-go v2.4.3+incompatible h1:c/FTk2POrEQyZfaHBMkMrXdu3/6IESJUHwu8r3k1JEU= +github.com/avast/retry-go v2.4.3+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= +github.com/aws/aws-sdk-go v1.15.24/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.90/go.mod h1:es1KtYUFs7le0xQ3rOihkuoVD90z7D0fR2Qm4S00/gU= +github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.39/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.44 h1:n9ahFoiyn66smjF34hYr3tb6/ZdBcLuFz7BCDhHyJ7I= +github.com/aws/aws-sdk-go v1.25.44/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= +github.com/bazelbuild/bazel-gazelle v0.0.0-20181012220611-c728ce9f663e/go.mod h1:uHBSeeATKpVazAACZBDPL/Nk/UhQDDsJWDlqYJo8/Us= +github.com/bazelbuild/buildtools v0.0.0-20180226164855-80c7f0d45d7e/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115/go.mod h1:zVt7zX3K/aDCk9Tj+VM7YymsX66ERvzCJzw8rFCX2JU= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bluekeyes/hatpear v0.0.0-20180714193905-ffb42d5bb417/go.mod h1:D+WOahrNtu6OK0KiVoXY9h5j7IcEs5LYke+zJkMBsKg= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bradleyfalzon/ghinstallation v0.1.2/go.mod h1:VQsLlCoNa54/CNXcc2DuCfNZrZxqQcyPeqKUugF/2h8= +github.com/briankassouf/jose v0.9.2-0.20180619214549-d2569464773f h1:ZMEzE7R0WNqgbHplzSBaYJhJi5AZWTCK9baU0ebzG6g= +github.com/briankassouf/jose v0.9.2-0.20180619214549-d2569464773f/go.mod h1:HQhVmdUf7dBNwIIdBTivnCDxcf6IZY3/zrb+uKSJz6Y= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1 h1:pgAtgj+A31JBVtEHu2uHuEx0n+2ukqUJnS2vVe5pQNA= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bugsnag/bugsnag-go v1.4.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/bugsnag-go v1.5.0 h1:tP8hiPv1pGGW3LA6LKy5lW6WG+y9J2xWUdPd3WC452k= +github.com/bugsnag/bugsnag-go v1.5.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/panicwrap v1.2.0 h1:OzrKrRvXis8qEvOkfcxNcYbOd2O7xXS2nnKMEMABFQA= +github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= +github.com/caddyserver/caddy v1.0.3/go.mod h1:G+ouvOY32gENkJC+jhgl62TyhvqEsFaDiZ4uw0RzP1E= +github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/centrify/cloud-golang-sdk v0.0.0-20190214225812-119110094d0f h1:gJzxrodnNd/CtPXjO3WYiakyNzHg3rtAi7rO74ejHYU= +github.com/centrify/cloud-golang-sdk v0.0.0-20190214225812-119110094d0f/go.mod h1:C0rtzmGXgN78pYR0tGJFhtHgkbAs0lIbHwkB81VxDQE= +github.com/certifi/gocertifi v0.0.0-20190105021004-abcd57078448/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c/go.mod h1:Xe6ZsFhtM8HrDku0pxJ3/Lr51rwykrzgFwpmTzleatY= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA= +github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/checkpoint-restore/go-criu v0.0.0-20190109184317-bdb7599cd87b/go.mod h1:TrMrLQfeENAPYPRsJuq3jsqdlRh3lvi6trTZJG8+tho= +github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chrismalek/oktasdk-go v0.0.0-20181212195951-3430665dfaa0 h1:CWU8piLyqoi9qXEUwzOh5KFKGgmSU5ZhktJyYcq6ryQ= +github.com/chrismalek/oktasdk-go v0.0.0-20181212195951-3430665dfaa0/go.mod h1:5d8DqS60xkj9k3aXfL3+mXBH0DPYO0FQjcKosxl+b/Q= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.0.0-20170928000206-9ce5d979ffda/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cfssl v0.0.0-20180726162950-56268a613adf/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA= +github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 h1:rdRS5BT13Iae9ssvcslol66gfOOXjaLYwqerEn/cl9s= +github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381/go.mod h1:e5+USP2j8Le2M0Jo3qKPFnNhuo1wueU4nWHCXBOfQ14= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c h1:2zRrJWIt/f9c9HhNHAgrRgq0San5gRRUJTBXLkchal0= +github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codedellemc/goscaleio v0.0.0-20170830184815-20e2ce2cf885/go.mod h1:JIHmDHNZO4tmA3y3RHp6+Gap6kFsNf55W9Pn/3YS9IY= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.1.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/console v0.0.0-20170925154832-84eeaae905fa/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.0.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190823190603-4a2f61c4f2b4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0 h1:xjvXQWABwS2uiv3TWgQt5Uth60Gu86LTGZXMJkjc7rY= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20181203112020-004b46473808 h1:4BX8f882bXEDKfWIf0wa8HRvpnBoPszJJXL+TVbBw4M= +github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.6.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/corbym/gocrest v1.0.3/go.mod h1:maVFL5lbdS2PgfOQgGRWDYTeunSWQeiEgoNdTABShCs= +github.com/coredns/coredns v1.1.2/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0= +github.com/coredns/corefile-migration v1.0.2/go.mod h1:OFwBp/Wc9dJt5cAZzHWMNhK1r5L0p0jDwIBc6j8NC8E= +github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-oidc v0.0.0-20180117170138-065b426bd416/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-oidc v2.0.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.0.0-20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/rkt v1.30.0/go.mod h1:O634mlH6U7qk87poQifK6M2rsFNt+FyUTWNMnP1hF1U= +github.com/cpuguy83/go-md2man v1.0.4/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cratonica/2goarray v0.0.0-20190331194516-514510793eaa h1:Wg+722vs7a2zQH5lR9QWYsVbplKeffaQFIs5FTdfNNo= +github.com/cratonica/2goarray v0.0.0-20190331194516-514510793eaa/go.mod h1:6Arca19mRx58CA7OWEd7Wu1NpC1rd3uDnNs6s1pj/DI= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v0.0.0-20170829104524-6e570ed0a266/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= +github.com/deislabs/oras v0.7.0 h1:RnDoFd3tQYODMiUqxgQ8JxlrlWL0/VMKIKRD01MmNYk= +github.com/deislabs/oras v0.7.0/go.mod h1:sqMKPG3tMyIX9xwXUBRLhZ24o+uT4y6jgBD2RzUTKDM= +github.com/denisenkom/go-mssqldb v0.0.0-20180620032804-94c9c97e8c9f/go.mod h1:xN/JuLBIz4bjkxNmByTiV1IbhfnYb6oo99phBn4Eqhc= +github.com/denisenkom/go-mssqldb v0.0.0-20190412130859-3b1d194e553a h1:yJ2kD1BvM28M4gt31MuDr0ROKsW+v6zBk9G0Bcr8qAY= +github.com/denisenkom/go-mssqldb v0.0.0-20190412130859-3b1d194e553a/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= +github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= +github.com/digitalocean/godo v1.10.0/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/cli v0.0.0-20190506213505-d88565df0c2d h1:qdD+BtyCE1XXpDyhvn0yZVcZOLILdj9Cw4pKu0kQbPQ= +github.com/docker/cli v0.0.0-20190506213505-d88565df0c2d/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017 h1:2HQmlpI3yI9deH18Q6xiSOIjXD4sLI55Y/gfpa8/558= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20170726174610-edc3ab29cdff/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.6.0-rc.1.0.20180327202408-83389a148052+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker-credential-helpers v0.6.1 h1:Dq4iIfcM7cNtddhLVWe9h4QDjsi4OER3Z8voPu/I52g= +github.com/docker/docker-credential-helpers v0.6.1/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ= +github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82 h1:X0fj836zx99zFu83v/M79DuBn84IL/Syx1SY6Y5ZEMA= +github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20180830151422-a9cd636e3789/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= +github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKGUhzj7BQlPSU4OvT6tfOKe3DVHzOA7s= +github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74 h1:2MIhn2R6oXQbgW5yHfS+d6YqyMfXiu2L55rFZC4UD/M= +github.com/duosecurity/duo_api_golang v0.0.0-20190308151101-6c680f768e74/go.mod h1:UqXY1lYT/ERa4OEAywUqdok1T4RCRdArkhic1Opuavo= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= +github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f h1:8GDPb0tCY8LQ+OJ3dbHb5sA6YZWXFORQYZx5sdsTlMs= +github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f h1:AUj1VoZUfhPhOPHULCQQDnGhRelpFWHMLhQVWDsS0v4= +github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.7.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.11.1+incompatible h1:CjKsv3uWcCMvySPQYKxO8XX3f9zD4FeZRsW4G0B4ffE= +github.com/emicklei/go-restful v2.11.1+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo= +github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.8.0/go.mod h1:GSSbY9P1neVhdY7G4wu+IK1rk/dqhiCC/4ExuWJZVuk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1 h1:+8frETDtT11P1dMCWySse/d0jMPOKYYF7OZjl7cZLvQ= +github.com/envoyproxy/go-control-plane v0.9.1/go.mod h1:G1fbsNGAFpC1aaERrShZQVdUV2ZuZuv6FCl2v9JNSxQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= +github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v0.0.0-20160318181535-f6a740d52f96/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v0.0.0-20180123065059-ebf56d35bba7/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fgrosse/zaptest v1.1.0 h1:sK9hP0/xBoNX5qfFo3KWFluDXfc809APomI1QXuYELA= +github.com/fgrosse/zaptest v1.1.0/go.mod h1:vMnRSul6kW7kIUXZgnZZcDwyTn8k49ODfAULL8nmL5w= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa h1:RDBNVkRviHZtvDvId8XSGPu3rmpmSe+wKRcEWNgsfWU= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/gammazero/deque v0.0.0-20190130191400-2afb3858e9c7 h1:D2LrfOPgGHQprIxmsTpxtzhpmF66HoM6rXSmcqaX7h8= +github.com/gammazero/deque v0.0.0-20190130191400-2afb3858e9c7/go.mod h1:GeIq9qoE43YdGnDXURnmKTnGg15pQz4mYkXSTChbneI= +github.com/gammazero/workerpool v0.0.0-20190406235159-88d534f22b56 h1:VzbudKn/nvxYKOdzgkEBS6SSreRjAgoJ+ZeS4wPFkgc= +github.com/gammazero/workerpool v0.0.0-20190406235159-88d534f22b56/go.mod h1:w9RqFVO2BM3xwWEcAB8Fwp0OviTBBEiRmSBDfbXnd3w= +github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= +github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v0.0.0-20180820084758-c7ce16629ff4/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= +github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= +github.com/gliderlabs/ssh v0.1.1 h1:j3L6gSLQalDETeEg/Jg0mGY0/y/N6zI2xX1978P0Uqw= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-acme/lego v2.5.0+incompatible/go.mod h1:yzMNe9CasVUhkquNvti5nAtPmG94USbYxYrZfTkIn0M= +github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-ldap/ldap v3.0.2+incompatible h1:kD5HQcAzlQ7yrhfn+h+MSABeAy/jAJhvIJ/QDllP44g= +github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v0.1.1 h1:qXBXPDdNncunGs7XeEpsJt8wCjYBygluzfdLO0G5baE= +github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= +github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= +github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= +github.com/go-openapi/analysis v0.19.5 h1:8b2ZgKfKIUTVQpTb77MoRDIMEIwvDVw40o3aOXdfYzI= +github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= +github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= +github.com/go-openapi/errors v0.19.2 h1:a2kIyV3w+OS3S97zxUndRVD46+FhGOUBDFY7nmu4CsY= +github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= +github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.0.0-20180322222829-3a0015ad55fa/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.0.0-20180322222742-3fb327e6747d/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= +github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= +github.com/go-openapi/loads v0.19.3/go.mod h1:YVfqhUCdahYwR3f3iiwQLhicVRvLlU/WO5WPaZvcvSI= +github.com/go-openapi/loads v0.19.4 h1:5I4CCSqoWzT+82bBkNIvmLc0UOsoKKQ4Fz+3VxOB7SY= +github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= +github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= +github.com/go-openapi/runtime v0.17.2/go.mod h1:QO936ZXeisByFmZEO1IS1Dqhtf4QV1sYYFtIq6Ld86Q= +github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= +github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= +github.com/go-openapi/runtime v0.19.5 h1:h4Zk7oTfB3ZYM2oMNliQvL+3BrDstTIX8lqP7yaYCuI= +github.com/go-openapi/runtime v0.19.5/go.mod h1:WIH6IYPXOrtgTClTV8xzdrD20jBlrK25D0aQbdSlqp8= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.0.0-20180415031709-bcff419492ee/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.19.4 h1:ixzUSnHTd6hCemgtAJgluaTSGYpLNpJY4mA2DIkdOAo= +github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/strfmt v0.19.3 h1:eRfyY5SkaNJCAwmmMcADjY31ow9+N7MCLW7oRkbsINA= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.0.0-20180405201759-811b1089cde9/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/validate v0.17.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.3 h1:PAH/2DylwWcIU1s0Y7k3yNmeAgWOcKrNE2Q7Ww/kCg4= +github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= +github.com/go-openapi/validate v0.19.5 h1:QhCBKRYqZR+SKo4gl1lPhPahope8/RLt6EVgY8X80w0= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-sql-driver/mysql v0.0.0-20180618115901-749ddf1598b4/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-swagger/go-swagger v0.21.0 h1:AX9mdfzp6eJtUe92nFrWmbK7ocRgkCDPJs0FsSSTDlA= +github.com/go-swagger/go-swagger v0.21.0/go.mod h1:tDb8PdDVFcaE8EPXkMOsuxpL3UEPiwu1UDZar9Z/1RY= +github.com/go-swagger/scan-repo-boundary v0.0.0-20180623220736-973b3573c013/go.mod h1:b65mBPzqzZWxOZGxSWrqs4GInLIn+u99Q9q7p+GKni0= +github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gocql/gocql v0.0.0-20180617115710-e06f8c1bcd78/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= +github.com/gocql/gocql v0.0.0-20190402132108-0e1d5de854df h1:fwXmhM0OqixzJDOGgTSyNH9eEDij9uGTXwsyWXvyR0A= +github.com/gocql/gocql v0.0.0-20190402132108-0e1d5de854df/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.0.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.3.0 h1:M695OaDJ5ipWvDPcoAg/YL9c3uORAegkEfBqTQF/fTQ= +github.com/gogo/googleapis v1.3.0/go.mod h1:d+q1s/xVJxZGKWwC/6UfPIF33J+G1Tq4GYv9Y+Tg/EU= +github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v0.0.0-20160127222235-bd3c8e81be01/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.33.2-0.20190411163913-9db8c7dee20a/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48= +github.com/google/cadvisor v0.34.0/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-containerregistry v0.0.0-20191202175804-2ce3ea99b462 h1:2uyObdUocX/d3nuWea5tyS1RGhiRraQLoGJnFlwuR+o= +github.com/google/go-containerregistry v0.0.0-20191202175804-2ce3ea99b462/go.mod h1:SkVlByC9zhyHtsu/clPj5VLThT2Di0fpmujW4HSHR98= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= +github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/goph/emperror v0.17.1 h1:6lOybhIvG/BB6VGoWfdv30FVZeZFBBZ9VvgzGXLVkyY= +github.com/goph/emperror v0.17.1/go.mod h1:+ZbQ+fUNO/6FNiUo0ujtMjhgad9Xa6fQL9KhH4LNHic= +github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gophercloud/gophercloud v0.6.0 h1:Xb2lcqZtml1XjgYZxbeayEemq7ASbeTp09m36gQFpEU= +github.com/gophercloud/gophercloud v0.6.0/go.mod h1:GICNByuaEBibcjmjvI7QvYJSZEbGkcYwAR7EZK2WMqM= +github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 h1:f0n1xnMSmBLzVfsMMvriDyA75NB/oBgILX2GcHXIQzY= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= +github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gosuri/uitable v0.0.1 h1:M9sMNgSZPyAu1FJZJLpJ16ofL8q5ko2EDUkICsynvlY= +github.com/gosuri/uitable v0.0.1/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f h1:ShTPMJQes6tubcjzGMODIVG5hlrCeImaBnZzKF2N8SM= +github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 h1:z53tR0945TRRQO/fLEVPI6SMv7ZflF0TEaTAoU7tOzg= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20170330212424-2500245aa611/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= +github.com/hashicorp/consul v1.5.2 h1:/FN0sSinNNJHVmby8aZfT2hOzeX0/fxFb7/1rH1Ati0= +github.com/hashicorp/consul v1.5.2/go.mod h1:Zbvyz3buCZQMF5YyCbu5DgHua7HZLDqheJdcADGBHmc= +github.com/hashicorp/consul/api v1.0.1/go.mod h1:LQlewHPiuaRhn1mP2XE4RrjnlRgOeWa/ZM0xWLCen2M= +github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0 h1:HXNYlRkkM/t+Y/Yhxtwcy02dlYwIaoxzvxPnS+cqy78= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.1.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.0/go.mod h1:ANbpTX1oAql27TZkKVeW8p1w8NTdnyzPe/0qqPCKohU= +github.com/hashicorp/go-checkpoint v0.0.0-20171009173528-1545e56e46de/go.mod h1:xIwEieBHERyEvaeKF/TcHh1Hu+lxPM+n2vT1+g9I4m4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-discover v0.0.0-20190403160810-22221edb15cd/go.mod h1:ueUgD9BeIocT7QNuvxSyJyPAM9dfifBcaWmeybb67OY= +github.com/hashicorp/go-gcp-common v0.5.0 h1:kkIQTjNTopn4eXQ1+lCiHYZXUtgIZvbc6YtAQkMnTos= +github.com/hashicorp/go-gcp-common v0.5.0/go.mod h1:IDGUI2N/OS3PiU4qZcXJeWKPI6O/9Y8hOrbSiMcqyYw= +github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= +github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-memdb v0.0.0-20180223233045-1289e7fffe71/go.mod h1:kbfItVoBJwCfKXDXN4YoAXjxcFVZ7MRrJzyTX6H4giE= +github.com/hashicorp/go-memdb v1.0.2 h1:AIjzJlwIxz2inhZqRJZfe6D15lPeF0/cZyS1BVlnlHg= +github.com/hashicorp/go-memdb v1.0.2/go.mod h1:I6dKdmYhZqU0RJSheVEWgTNWdVQH5QvTgIUQ0t/t32M= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-plugin v0.0.0-20180331002553-e8d22c780116/go.mod h1:JSqWYsict+jzcj0+xElxyrBQRPNoiWQuddnxArJ7XHQ= +github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE= +github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-raftchunking v0.6.2 h1:imj6CVkwXj6VzgXZQvzS+fSrkbFCzlJ2t00F3PacnuU= +github.com/hashicorp/go-raftchunking v0.6.2/go.mod h1:cGlg3JtDy7qy6c/3Bu660Mic1JF+7lWqIwCFSb08fX0= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.5.4 h1:1BZvpawXoJCWX6pNtow9+rpEj+3itIlutiqnntI6jOE= +github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.1 h1:DMo4fmknnz0E0evoNYnV48RjWndOsmd6OW+09R3cEP8= +github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v0.0.0-20170202080759-03c5bf6be031/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v0.0.0-20160711231752-d8c773c4cba1/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= +github.com/hashicorp/hcl v0.0.0-20180906183839-65a6292f0157/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hil v0.0.0-20160711231837-1e86c6b523c5/go.mod h1:KHvg/R2/dPtaePb16oW4qIyzkMxXOL38xjRN64adsts= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.1.4 h1:gkyML/r71w3FL8gUi74Vk76avkj/9lYAY9lvg0OcoGs= +github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69/go.mod h1:/z+jUGRBlwVpUZfjute9jWaF6/HuhjuFQuL1YXzVD1Q= +github.com/hashicorp/nomad/api v0.0.0-20190412184103-1c38ced33adf h1:U/40PQvWkaXCDdK9QHKf1pVDVcA+NIDVbzzonFGkgIA= +github.com/hashicorp/nomad/api v0.0.0-20190412184103-1c38ced33adf/go.mod h1:BDngVi1f4UA6aJq9WYTgxhfWSE1+42xshvstLU2fRGk= +github.com/hashicorp/raft v1.0.1/go.mod h1:DVSAWItjLjTOkVbSpWQ0j0kUADIvDaCtBxIcbNAQLkI= +github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM= +github.com/hashicorp/raft v1.1.1 h1:HJr7UE1x/JrJSc9Oy6aDBHtNHUUBHjcQjTgvUVihoZs= +github.com/hashicorp/raft v1.1.1/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= +github.com/hashicorp/raft-boltdb v0.0.0-20150201200839-d1e82c1ec3f1/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= +github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= +github.com/hashicorp/raft-snapshot v1.0.1 h1:cx002JsTEAfAP0pIuANlDtTXg/pi2Db6YbRRmLQTQKw= +github.com/hashicorp/raft-snapshot v1.0.1/go.mod h1:5sL9eUn72lH5DzsFIJ9jaysITbHksSSszImWSOTC8Ic= +github.com/hashicorp/serf v0.8.2 h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/vault v0.10.3 h1:3Hf6mwC4rggOq6ViWSoJ2yfk1oBS5ed58LLcP33gmEg= +github.com/hashicorp/vault v0.10.3/go.mod h1:KfSyffbKxoVyspOdlaGVjIuwLobi07qD1bAbosPMpP0= +github.com/hashicorp/vault v1.2.0 h1:Daa0PtdqucVNuQ9KbvOk0XjbsGvPoFKv9X9fdKHQTrk= +github.com/hashicorp/vault v1.2.0/go.mod h1:HIOD/sbdZJ+KKX2/d/a4m/KDsBRjns8YDVnFUdcJjFc= +github.com/hashicorp/vault-plugin-auth-alicloud v0.5.2-0.20190730042457-c395df6cf9ad h1:yGOnVgG9aHMd8wLSHvA3hS5rq3B/hSSoQ66F3Ksor84= +github.com/hashicorp/vault-plugin-auth-alicloud v0.5.2-0.20190730042457-c395df6cf9ad/go.mod h1:gGDuTBheAxJNRSuMP9GXYaZG6fcmJwZmeCDnkeGh1dY= +github.com/hashicorp/vault-plugin-auth-azure v0.5.2-0.20190730042506-ea9c527dad54 h1:3uia+EzjQ+etQqhjdvyudyXaGPAaMSjprDfLnk80e6o= +github.com/hashicorp/vault-plugin-auth-azure v0.5.2-0.20190730042506-ea9c527dad54/go.mod h1:8ohKOZvLdPcgxcGG2Y0xt3a8T4xQzxRPIgyGj9Y9pnE= +github.com/hashicorp/vault-plugin-auth-centrify v0.5.2-0.20190730042513-cbbe5ae0021d h1:CU/B52LFjVsbD02jKtaNZuvo3Eo6R2EOG5lIB9H7CJ4= +github.com/hashicorp/vault-plugin-auth-centrify v0.5.2-0.20190730042513-cbbe5ae0021d/go.mod h1:1AEVetqwm/CpGJLS3kbmesG2DXlcodD1q9md3InmIwE= +github.com/hashicorp/vault-plugin-auth-gcp v0.5.1/go.mod h1:eLj92eX8MPI4vY1jaazVLF2sVbSAJ3LRHLRhF/pUmlI= +github.com/hashicorp/vault-plugin-auth-gcp v0.5.2-0.20190730042519-f5a47667d35c h1:tb4geTW1WoSqaHjcwniDc9iAv5ngpJzM6nUUu2B84OU= +github.com/hashicorp/vault-plugin-auth-gcp v0.5.2-0.20190730042519-f5a47667d35c/go.mod h1:RQabTr6JNn3J4K4CGY9CohFO0shpAK6QCx2LrntPehg= +github.com/hashicorp/vault-plugin-auth-jwt v0.5.2-0.20190730042527-3d85d12ec6b6 h1:GFNxQZ6J4i4CBYZ0gCWuR286ptnZEXqwhk8v67m6HB4= +github.com/hashicorp/vault-plugin-auth-jwt v0.5.2-0.20190730042527-3d85d12ec6b6/go.mod h1:vtUJ+05r7coC4TyKEdZ8Fw/wzRKikDkoBuHFS/9JJgo= +github.com/hashicorp/vault-plugin-auth-kubernetes v0.5.2-0.20190730042533-e4b69df916b8 h1:wCnu6i6LgG66df7o4lK/COVo0OYiUI2bIuvLZ1GOBlY= +github.com/hashicorp/vault-plugin-auth-kubernetes v0.5.2-0.20190730042533-e4b69df916b8/go.mod h1:vbsD/KqeeknPR31viJ/Ch3pii1NHFxsBrdBSxIV7HSs= +github.com/hashicorp/vault-plugin-auth-pcf v0.0.0-20190730042539-6f948c02ea2d h1:1SJvD9NIS6jGdPaOqVlyjoCEAINmSEmTcEBRMG8VGa4= +github.com/hashicorp/vault-plugin-auth-pcf v0.0.0-20190730042539-6f948c02ea2d/go.mod h1:+Zk2sV+Ga2KPH5QTmDU3v7qBJDD9GljESoNdU/Ea/0A= +github.com/hashicorp/vault-plugin-database-elasticsearch v0.0.0-20190730042544-81772df4467d h1:ZP2bLGMWnztAvnb6pLROTMpNzIH5UW3rcCVFEHdb8bs= +github.com/hashicorp/vault-plugin-database-elasticsearch v0.0.0-20190730042544-81772df4467d/go.mod h1:KD56g+aeTNH2AM1l8iOBf5KxX+DSNKleEswJxXE8nI8= +github.com/hashicorp/vault-plugin-secrets-ad v0.5.3-0.20190730042549-a191a183a1f3 h1:uYWb/W7Thu9OAPodpcc89xVlsLjXd5LDcJaTpyZvxME= +github.com/hashicorp/vault-plugin-secrets-ad v0.5.3-0.20190730042549-a191a183a1f3/go.mod h1:bOd6HVuGZgcKR+QUUhGvQ+BU8d8KqRNAXvQ8ihBmtfo= +github.com/hashicorp/vault-plugin-secrets-alicloud v0.5.2-0.20190730042556-6c462a37ae43 h1:zMvKZU6IBd039K2wbNp70uwbg0ztwdL2WbBqFwOhs8M= +github.com/hashicorp/vault-plugin-secrets-alicloud v0.5.2-0.20190730042556-6c462a37ae43/go.mod h1:ndDvbwS9SkZrxzlnjsNtmYc2Qz1WNFtQEvlYuljE+NM= +github.com/hashicorp/vault-plugin-secrets-azure v0.5.2-0.20190730042604-fc8e75528aa0 h1:WVCkBaAzfMc7jpEpRKwlE8yRkk1BaOfaPFB9MZTCXGk= +github.com/hashicorp/vault-plugin-secrets-azure v0.5.2-0.20190730042604-fc8e75528aa0/go.mod h1:R/PeTA9E4NfMd8NGy9gmOFJNyB+JcQDsckD0HXv7wZw= +github.com/hashicorp/vault-plugin-secrets-gcp v0.5.3-0.20190730042611-bdbdbdf0ecec h1:f1OrvVgyHZ1hDaGHAO1UWpPN51d1r2bncgN5fh0fS0A= +github.com/hashicorp/vault-plugin-secrets-gcp v0.5.3-0.20190730042611-bdbdbdf0ecec/go.mod h1:GJjJ2oa9CenWs35tZwParXQzhGgwQxAtlZ+CelUBtSE= +github.com/hashicorp/vault-plugin-secrets-gcpkms v0.5.2-0.20190730042620-21e481a323c7 h1:VHoO3CsKGhZ5x9DqSJRf7chvIXcHaoTw0eY0h2+4NMs= +github.com/hashicorp/vault-plugin-secrets-gcpkms v0.5.2-0.20190730042620-21e481a323c7/go.mod h1:He7TWjrGUzez4tDq/cEzQWmqr/puNAnUdrn+t6uNoxw= +github.com/hashicorp/vault-plugin-secrets-kv v0.0.0-20190318174639-195e0e9d07f1/go.mod h1:VJHHT2SC1tAPrfENQeBhLlb5FbZoKZM+oC/ROmEftz0= +github.com/hashicorp/vault-plugin-secrets-kv v0.5.2-0.20190730042626-1ef9e711c818 h1:gXHo1EVTJ1DLfQf3ipKOmjAPDo8m7gtuxFUjohSjmGM= +github.com/hashicorp/vault-plugin-secrets-kv v0.5.2-0.20190730042626-1ef9e711c818/go.mod h1:NVTIsqXgIu1CW+Dsnkn8AE4+QVrivR8sAzlGT7+aO58= +github.com/hashicorp/vault/api v1.0.1/go.mod h1:AV/+M5VPDpB90arloVX0rVDUIHkONiwz5Uza9HRtpUE= +github.com/hashicorp/vault/api v1.0.4 h1:j08Or/wryXT4AcHj1oCbMd7IijXcKzYUGw59LGu9onU= +github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= +github.com/hashicorp/vault/api v1.0.5-0.20190730042357-746c0b111519 h1:2qdbEUXjHohC+OYHtVU5lujvPAHPKYR4IMs9rsiUTk8= +github.com/hashicorp/vault/api v1.0.5-0.20190730042357-746c0b111519/go.mod h1:i9PKqwFko/s/aihU1uuHGh/FaQS+Xcgvd9dvnfAvQb0= +github.com/hashicorp/vault/sdk v0.1.8/go.mod h1:tHZfc6St71twLizWNHvnnbiGFo1aq0eD2jGPLtP8kAU= +github.com/hashicorp/vault/sdk v0.1.13 h1:mOEPeOhT7jl0J4AMl1E705+BcmeRs1VmKNb9F0sMLy8= +github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= +github.com/hashicorp/vault/sdk v0.1.14-0.20190729200543-e88721c7db1e/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= +github.com/hashicorp/vault/sdk v0.1.14-0.20190730042320-0dc007d98cc8 h1:fLUoZ8cI/pqlVCk09r88cVoY7ggKEl1A4e6Mujr3RvU= +github.com/hashicorp/vault/sdk v0.1.14-0.20190730042320-0dc007d98cc8/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= +github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= +github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/heketi/heketi v0.0.0-20181109135656-558b29266ce0/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/heketi v9.0.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/rest v0.0.0-20180404230133-aa6a65207413/go.mod h1:BeS3M108VzVlmAue3lv2WcGuPAX94/KN63MUURzbYSI= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= +github.com/heketi/utils v0.0.0-20170317161834-435bc5bdfa64/go.mod h1:RYlF4ghFZPPmk2TC5REt5OFwvfb6lzxFWrTWB+qs28s= +github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= +github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c h1:kp3AxgXgDOmIJFR7bIwqFhwJ2qWar8tEQSE5XXhCfVk= +github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334 h1:VHgatEHNcBFEB7inlalqfNqw65aNkM1lGX2yt3NmbS8= +github.com/iancoleman/strcase v0.0.0-20191112232945-16388991a334/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/ilackarms/protoc-gen-doc v1.0.0 h1:An/dVVDzA6jSiLnsFB6l5kIoMwr5Z/C13s3OjsrVZGE= +github.com/ilackarms/protoc-gen-doc v1.0.0/go.mod h1:Xg+QAXYbry+dRyOxs6nw1QpJb5I153zqbzKgN/X0SEs= +github.com/ilackarms/protokit v0.0.0-20181231193355-ee2393f3bbf0 h1:+egX7Zu/wBZypMEuLDNIJfixIvNGP27sC4SZuTQlNtU= +github.com/ilackarms/protokit v0.0.0-20181231193355-ee2393f3bbf0/go.mod h1:PTd832Hm2MUT53VrLoesXQvmaw7778dqw4Qu6TOpWDk= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf h1:WfD7VjIE6z8dIvMsI4/s+1qr5EL+zoIGev1BQj1eoJ8= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf/go.mod h1:hyb9oH7vZsitZCiBt0ZvifOrB+qc8PS5IiilCIb87rg= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4 h1:3K3KcD4S6/Y2hevi70EzUTNKOS3cryQyhUnkjE6Tz0w= +github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= +github.com/jackc/pgx v3.3.0+incompatible h1:Wa90/+qsITBAPkAZjiByeIGHFcj3Ztu+VzrrIpHjL90= +github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= +github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jeffchao/backoff v0.0.0-20140404060208-9d7fd7aa17f2 h1:mex1izRBCD+7WjieGgRdy7e651vD/lvB1bD9vNE/3K4= +github.com/jeffchao/backoff v0.0.0-20140404060208-9d7fd7aa17f2/go.mod h1:xkfESuHriIekR+4RoV+fu91j/CfnYM29Zi2tMFw5iD4= +github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f h1:E87tDTVS5W65euzixn7clSzK66puSt1H4I5SC0EmHH4= +github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f/go.mod h1:3J2qVK16Lq8V+wfiL2lPeDZ7UWMxk5LemerHa1p6N00= +github.com/jefferai/jsonx v0.0.0-20160721235117-9cc31c3135ee/go.mod h1:N0t2vlmpe8nyZB5ouIbJQPDSR+mH6oe7xHB9VZHSUzM= +github.com/jefferai/jsonx v1.0.0 h1:Xoz0ZbmkpBvED5W9W1B5B/zc3Oiq7oXqiW7iRV3B6EI= +github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo8vFvoQ= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/protoreflect v1.5.0 h1:NgpVT+dX71c8hZnxHof2M7QDK7QtohIJ7DYycjnkyfc= +github.com/jhump/protoreflect v1.5.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/jonboulle/clockwork v0.0.0-20141017032234-72f9bd7c4e0c/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= +github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869 h1:BvV6PYcRz0yGnWXNZrd5wginNT1GfFfPvvWpPbjfFL8= +github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= +github.com/json-iterator/go v0.0.0-20180315132816-ca39e5af3ece/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jteeuwen/go-bindata v0.0.0-20151023091102-a0ff2567cfb7/go.mod h1:JVvhzYOiGBnFSYRyV00iY8q7/0PThjIYav1p9h5dmKs= +github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/k0kubun/pp v2.3.0+incompatible h1:EKhKbi34VQDWJtq+zpsKSEhkHHs9w2P8Izbq8IhLVSo= +github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= +github.com/kardianos/osext v0.0.0-20150410034420-8fef92e41e22/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= +github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp/Cjunrr1WlsXSZpqXn+uREuHvUVcK82CV8= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/keybase/go-crypto v0.0.0-20180614160407-5114a9a81e1b/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= +github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f h1:Gsc9mVHLRqBjMgdQCghN9NObCcRncDqxJvBvEaIIQEo= +github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= +github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 h1:WjT3fLi9n8YWh/Ih8Q1LHAPsTqGddPcHqscN+PJ3i68= +github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169/go.mod h1:glhvuHOU9Hy7/8PwwdtnarXqLagOX0b/TbZx2zLMqEg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.0.0-20140812000539-f31442d60e51/go.mod h1:Bvhd+E3laJ0AVkG0c9rmtZcnhV0HQ3+c3YxxqTvc/gA= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.0.0/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5 h1:hyz3dwM5QLc1Rfoz4FuWJQG5BN7tc6K1MndAUnGpQr4= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.0.0-20130911015532-6807e777504f/go.mod h1:sjUstKUATFIcff4qlB53Kml0wQPtJVc/3fWrmuUmcfA= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/lib/pq v0.0.0-20180523175426-90697d60dd84/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/libopenstorage/openstorage v0.0.0-20170906232338-093a0c388875/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= +github.com/lucas-clemente/quic-clients v0.1.0/go.mod h1:y5xVIEoObKqULIKivu+gD/LU90pL73bTdtQjPBvtCBk= +github.com/lucas-clemente/quic-go v0.10.2/go.mod h1:hvaRS9IHjFLMq76puFJeWNfmn+H70QZ/CXoxqw9bzao= +github.com/lucas-clemente/quic-go-certificates v0.0.0-20160823095156-d2f86524cced/go.mod h1:NCcRLrOTZbzhZvixZLlERbJtDtYsmMw8Jc4vS8Z0g58= +github.com/lyft/protoc-gen-validate v0.0.0-20180911180927-64fcb82c878e/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/lyft/protoc-gen-validate v0.0.6/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v0.0.0-20160816085511-61b492c03cf4/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180323154445-8b799c424f57/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a h1:+J2gw7Bw77w/fbK7wnNJJDKmw1IbWft2Ul5BzrG1Qm8= +github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a/go.mod h1:M1qoD/MqPgTZIk0EWKB38wE28ACRfVcn+cU08jyArI0= +github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6 h1:V2iyH+aX9C5fsYCpK60U8BYIvmhqxuOL3JZcqc1NB7k= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-shellwords v0.0.0-20180605041737-f8471b0a71de/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/matttproud/golang_protobuf_extensions v1.0.0/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/mesos/mesos-go v0.0.9/go.mod h1:kPYCMQ9gsOXVAle1OsoY4I1+9kPu8GHkf88aV59fDr4= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mholt/caddy v0.0.0-20180213163048-2de495001514/go.mod h1:Wb1PlT4DAYSqOEd03MsqkdkXnTxA8v9pKjdpxbqM1kY= +github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2/go.mod h1:g4cOPxcjV0oFq3qwpjSA30LReKD8AoIfwAY9VvG35NY= +github.com/michaelklishin/rabbit-hole v1.5.0 h1:Bex27BiFDsijCM9D0ezSHqyy0kehpYHuNKaPqq/a4RM= +github.com/michaelklishin/rabbit-hole v1.5.0/go.mod h1:vvI1uOitYZi0O5HEGXhaWC1XT80Gy+HvFheJ+5Krlhk= +github.com/miekg/dns v0.0.0-20160614162101-5d001d020961/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v0.0.0-20181005163659-0d29b283ac0f/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.4 h1:rCMZsU2ScVSYcAsOXgmC6+AKOK+6pmQTOcw03nfwYV0= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20171110221305-fee913ce8fb2/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v0.0.0-20151009155749-1b4ae6fb4e77/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v0.0.0-20160804032330-cdac8253d00f/go.mod h1:eOsF2yLPlBBJPvD+nhl5QMTBSOBbOph6N7j/IDUw7PY= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/pointerstructure v0.0.0-20190430161007-f252a8fd71c8 h1:1CO5wil3HuiVLrUQ2ovSTO+6AfNOA5EMkHHVyHE9IwA= +github.com/mitchellh/pointerstructure v0.0.0-20190430161007-f252a8fd71c8/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8= +github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309 h1:cvy4lBOYN3gKfKj8Lzz5Q9TfviP+L7koMHY7SvkyTKs= +github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180228065516-1df9eeb2bb81/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.0.0-20160930181131-4ee1cc9a8058/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v0.0.0-20160110113200-1b768d7c393a/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= +github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= +github.com/oklog/run v0.0.0-20180308005104-6934b124db28/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.3 h1:i0LBnzgiChAWHJYTQAZJDOgf8MNxAVYZJ2m63SIDimI= +github.com/olekukonko/tablewriter v0.0.3/go.mod h1:YZeBtGzYYEsCHp2LST/u/0NDwGkRoBtmn1cIWCJiS6M= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v0.0.0-20170604055404-372ad780f634/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20181113202123-f000fe11ece1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc2.0.20190611121236-6cc515888830 h1:yvQ/2Pupw60ON8TYEIGGTAI77yZsWYkiOeHFZWkwlCk= +github.com/opencontainers/runc v1.0.0-rc2.0.20190611121236-6cc515888830/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v1.0.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v0.0.0-20170621221121-4a2974bf1ee9/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs= +github.com/opencontainers/selinux v1.2.2/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs= +github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/operator-framework/operator-sdk v0.0.5 h1:i9HJCIC32pkGaFtdzdtNKhswLHnvV+CTrRcY31M+uv0= +github.com/operator-framework/operator-sdk v0.0.5/go.mod h1:iVyukRkam5JZa8AnjYf+/G3rk7JI1+M6GsU0sq0B9NA= +github.com/ory/dockertest v3.3.4+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= +github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= +github.com/palantir/go-baseapp v0.0.0-20190430095958-24408a192334/go.mod h1:tflQ4JA/PNb9xPyPgUupnfJg+sBdHcxuzAE0lkGPjbI= +github.com/palantir/go-githubapp v0.0.0-20190620114758-91e10a96cd34/go.mod h1:uZIoNfgr21uavtnudWm7FMvDZ5u+bHI1JHfZ1hXodDs= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v0.0.0-20180527043350-9f6ff22cfff8/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg= +github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/petar/GoLLRB v0.0.0-20130427215148-53be0d36a84c/go.mod h1:HUpKUBZnpzkdx0kD/+Yfuft+uD3zHGtXF/XJB14TUr4= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5 h1:rZQtoozkfsiNs36c7Tdv/gyGNzD1X1XWKO8rptVNZuM= +github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v0.0.0-20160930220758-4d0e916071f6/go.mod h1:NxmoDg/QLVWluQDUYG7XBZTLUpKeFa8e3aMf1BfjyHk= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.1 h1:LrvDIY//XNo65Lq84G/akBuMGlawHvGBABv8f/ZN6DI= +github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= +github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= +github.com/pquerna/otp v1.1.0 h1:q2gMsMuMl3JzneUaAX1MRGxLvOG6bzXV51hivBaStf0= +github.com/pquerna/otp v1.1.0/go.mod h1:Zad1CMQfSQZI5KLpahDiSUX4tMMREnXw98IvL1nhgMk= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI= +github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= +github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190129233650-316cf8ccfec5/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/prometheus v2.5.0+incompatible h1:7QPitgO2kOFG8ecuRn9O/4L9+10He72rVRJvMXrE9Hg= +github.com/prometheus/prometheus v2.5.0+incompatible/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic= +github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4= +github.com/pseudomuto/protoc-gen-doc v1.0.0 h1:g4ld0LeJ2OO2FXhm1o7Arrv+W75sdEClxuvVUSN2RAE= +github.com/pseudomuto/protoc-gen-doc v1.0.0/go.mod h1:fwtQAY9erXp3mC92O8OTECnDlJT2r0Ff4KSEKbGEmy0= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= +github.com/radovskyb/watcher v1.0.7 h1:AYePLih6dpmS32vlHfhCeli8127LzkIgwJGcwwe8tUE= +github.com/radovskyb/watcher v1.0.7/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU= +github.com/robfig/cron v0.0.0-20170309132418-df38d32658d8/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rollbar/rollbar-go v1.0.2/go.mod h1:AcFs5f0I+c71bpHlXNNDbOWJiKwjFDtISeXco0L5PKQ= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.14.3/go.mod h1:3WXPzbXEEliJ+a6UFE4vhIxV8qR1EML6ngzP9ug4eYg= +github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec h1:6ncX5ko6B9LntYM0YBRXkiSaZMmLYeZ/NWcmeB43mMY= +github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.0.0-20150813023252-1b506fc7c24e/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shurcooL/githubv4 v0.0.0-20190625031733-ee671ab25ff0/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= +github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f/go.mod h1:AuYgA5Kyo4c7HfUmvRGs/6rGlMMV/6B1bVnB9JxJEEg= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sigma/go-inotify v0.0.0-20181102212354-c87b6cf5033d/go.mod h1:stlh9OsqBQSdwxTxX73mu41BBtRbIpZLQ7flcAoxAfo= +github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw= +github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/solo-io/envoy-operator v0.1.1 h1:fiUN3lqvR9OwmMuktX0MjLSNwGdya+1ObvxXqQGZwsQ= +github.com/solo-io/envoy-operator v0.1.1/go.mod h1:ZP5hB+khljAFCROj/yDjVPXCPHntdewy6mqYybcCneQ= +github.com/solo-io/go-list-licenses v0.0.0-20191023220251-171e4740d00f h1:CHgAq6eqV0JkJJifAEQ3f80YYmsxqTmhJfg6UnGVrCA= +github.com/solo-io/go-list-licenses v0.0.0-20191023220251-171e4740d00f/go.mod h1:lojsKFoQQH0O/ElLmagtWINB9zAaq04E8z0xIVS/gLU= +github.com/solo-io/go-utils v0.11.0 h1:x4LB+TnWr6uWI8oP89d6FvGXbGFrsFpuHj5ovAiK68A= +github.com/solo-io/go-utils v0.11.0/go.mod h1:R8lbLuLtMaTOhD+6wGpdxj60r1Vwt63fHe1UxlObHig= +github.com/solo-io/reporting-client v0.1.2 h1:U585Q5UlB5/UUewtgEAQz94SWuNRBxoHc4tPthhnYko= +github.com/solo-io/reporting-client v0.1.2/go.mod h1:FmBDzwc1zEwayCCrlP+1w7NcpM0FIuvU+NSePj4wJq8= +github.com/solo-io/solo-kit v0.6.3/go.mod h1:oBaQ6tOwuO97u7w+s3TeI08YLHcbiWemInx0XkDfKFw= +github.com/solo-io/solo-kit v0.11.13-0.20191127032754-6bb54b82fcc9 h1:9nAptfBB8jGy0MxSFCFVL2sZrbKMkuUfavAPDaBE03w= +github.com/solo-io/solo-kit v0.11.13-0.20191127032754-6bb54b82fcc9/go.mod h1:oBaQ6tOwuO97u7w+s3TeI08YLHcbiWemInx0XkDfKFw= +github.com/solo-io/solo-kit v0.11.13 h1:Vhi9Y8GA0foe10Wc2fvi2S6vZ4Srh0Y/ObHHPXTRN/0= +github.com/solo-io/solo-kit v0.11.13/go.mod h1:oBaQ6tOwuO97u7w+s3TeI08YLHcbiWemInx0XkDfKFw= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v0.0.0-20160816080757-b28a7effac97/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v0.0.0-20160730092037-e31f36ffc91a/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.0-20180319062004-c439c4fa0937/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v0.0.0-20160311093646-33c24e77fb80/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v0.0.0-20160820190039-7fb2782df3d8/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.5.0 h1:GpsTwfsQ27oS/Aha/6d1oD7tpKIqWnOA6tgOX9HHkt4= +github.com/spf13/viper v1.5.0/go.mod h1:AkYRkVJF8TkSG/xet6PzXX+l39KhhXa2pdqVSxnTcn4= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9/go.mod h1:RHkNRtSLfOK7qBTHaeSX1D6BNpI3qw7NTxsmNr4RvN8= +github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43 h1:BasDe+IErOQKrMVXab7UayvSlIpiyGwRvuX3EKYY7UA= +github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netlink v0.0.0-20171020171820-b2de5d10e38e/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/vmware/govmomi v0.20.1/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/vmware/photon-controller-go-sdk v0.0.0-20170310013346-4a435daef6cc/go.mod h1:e6humHha1ekIwTCm+A5Qed5mG8V4JL+ChHcUOJ+L/8U= +github.com/xanzy/go-cloudstack v0.0.0-20160728180336-1e2cbf647e57/go.mod h1:s3eL3z5pNXF5FVybcT+LIVdId8pYn709yv6v5mrkrQE= +github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.1.0 h1:ngVtJC9TY/lg0AA/1k48FYhBrhRoFlEmWzsehpNAaZg= +github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xenolf/lego v0.0.0-20160613233155-a9d8cec0e656/go.mod h1:fwiGnfsIjG7OHPfOvgK7Y/Qo6+2Ox0iozjNTkZICKbY= +github.com/xenolf/lego v0.3.2-0.20160613233155-a9d8cec0e656 h1:BTvU+npm3/yjuBd53EvgiFLl5+YLikf2WvHsjRQ4KrY= +github.com/xenolf/lego v0.3.2-0.20160613233155-a9d8cec0e656/go.mod h1:fwiGnfsIjG7OHPfOvgK7Y/Qo6+2Ox0iozjNTkZICKbY= +github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940 h1:p7OofyZ509h8DmPLh8Hn+EIIZm/xYhdZHJ9GnXHdr6U= +github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.6 h1:qMJQYPNdtJ7UNYHjX38KXZtltKTqimMuoQjNnSVIuJg= +github.com/yvasiyarov/gorelic v0.0.6/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20190412021913-f29b1ada1971 h1:C+ye4QyWT3rbVj8As5DUc+Dsp067xJxCC6aa9+UnCmU= +go.etcd.io/etcd v0.0.0-20190412021913-f29b1ada1971/go.mod h1:KSGwdbiFchh5KIC9My2+ZVl5/3ANcwohw50dpPwa2cw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1 h1:Sq1fR+0c58RME5EoqKdjkiQAmPjmfHlZOoRI6fTUOcs= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2 h1:jxcFYjlkl8xaERsgLo+RNquI0epW6zuy/ZRQs6jnrFA= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A= +go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +goji.io v2.0.2+incompatible/go.mod h1:sbqFwrtqZACxLBTQcdgVjFh54yGVCvwq8+w49MVMMIk= +golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180608092829-8ac0e0d97ce4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190907121410-71b5226ff739/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191028145041-f83a4685e152 h1:ZC1Xn5A1nlpSmQCIva4bZ3ob3lmhYIefc+GU+DLg1Ow= +golang.org/x/crypto v0.0.0-20191028145041-f83a4685e152/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e h1:egKlR8l7Nu9vHGWbcUV8lqR4987UfUbBd7GbhqGzNYU= +golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd h1:GGJVjV8waZKRHrgwvtH66z9ZGVurTD1MT0n1Bb+q4aM= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271 h1:N66aaryRB3Ax92gH0v3hp1QYZ3zWWCCUR/j8Ifh45Ss= +golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190319182350-c85d3e98c914/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181004145325-8469e314837c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190410170021-cc4d4f50624c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190508220229-2d0786266e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190907184412-d223b2b6db03/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934 h1:u/E0NqCIWRDAo9WCFo6Ko49njPFDLSd3z+X1HgWDMpE= +golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e h1:9vRrk9YW2BTzLP0VCB9ZDjU4cPqkg+IDWL7XgxA1yxQ= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20170824195420-5d2fd3ccab98/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190706070813-72ffa07ba3db/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f h1:3MlESg/jvTr87F4ttA/q4B+uhe/q6qleC9/DP+IwQmY= +golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191205133340-d1f10d1c4e25 h1:5VU6vFy0xiB4WoxBoqfqmwg9g5eN0R5Az3Xfzo1EhO4= +golang.org/x/tools v0.0.0-20191205133340-d1f10d1c4e25/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe h1:BEVcKURC7E0EF+vD1l52Jb3LOM5Iwu7OI5FpdPuU50o= +golang.org/x/tools v0.0.0-20191205225056-3393d29bb9fe/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +google.golang.org/api v0.0.0-20180829000535-087779f1d2c9/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.2.0/go.mod h1:IfRCZScioGtypHNTlz3gFk67J8uePVW7uDTBzXuIkhU= +google.golang.org/api v0.3.0/go.mod h1:IuvZyQh8jgscv8qWfQ4ABd8m7hEudgBFM/EdhA3BnXw= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.6.0 h1:2tJEkRfnZL5g1GeBUlITh/rqT5HG3sFcoVCUUxmgJ2g= +google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= +google.golang.org/api v0.6.1-0.20190607001116-5213b8090861/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0 h1:7tmAxx3oKE98VMZ+SBZzvYYWRQ9HODBxmC8mXUsraSQ= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170731182057-09f6ed296fc6/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180608181217-32ee49c4dd80/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190128161407-8ac453e89fca/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190513181449-d00d292a067c/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191028173616-919d9bdd9fe6/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11 h1:51D++eCgOHufw5VfDE9Uzqyyc+OyQIjb9hkYy9LN5Fk= +google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.13.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +gopkg.in/AlecAivazis/survey.v1 v1.8.2/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA= +gopkg.in/AlecAivazis/survey.v1 v1.8.7 h1:oBJqtgsyBLg9K5FK9twNUbcPnbCPoh+R9a+7nag3qJM= +gopkg.in/AlecAivazis/survey.v1 v1.8.7/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk= +gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mcuadros/go-syslog.v2 v2.2.1/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= +gopkg.in/mgo.v2 v2.0.0-20160818020120-3f83fa500528/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/natefinch/lumberjack.v2 v2.0.0-20150622162204-20b71e5b60d7/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/ory-am/dockertest.v3 v3.3.4/go.mod h1:s9mmoLkaGeAh97qygnNj4xWkiN7e1SKekYC6CovU+ek= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v1 v1.1.2 h1:/5jmADZB+RiKtZGr4HxsEFOEfbfsjTKsVnqpThUpE30= +gopkg.in/square/go-jose.v1 v1.1.2/go.mod h1:QpYS+a4WhS+DTlyQIi6Ka7MS3SuR9a055rgXNEe6EiA= +gopkg.in/square/go-jose.v2 v2.0.0-20180411045311-89060dee6a84/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/src-d/go-billy.v4 v4.2.1 h1:omN5CrMrMcQ+4I8bJ0wEhOBPanIRWzFC953IiXKdYzo= +gopkg.in/src-d/go-billy.v4 v4.2.1/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1 h1:XWW/s5W18RaJpmo1l0IYGqXKuJITWRFuA45iOf1dKJs= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.10.0 h1:NWjTJTQnk8UpIGlssuefyDZ6JruEjo5s88vm88uASbw= +gopkg.in/src-d/go-git.v4 v4.10.0/go.mod h1:Vtut8izDyrM8BUVQnzJ+YvmNcem2J89EmfZYCkLokZk= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.0.0/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gotest.tools v2.1.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/gotestsum v0.3.5/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY= +helm.sh/helm/v3 v3.0.0 h1:or/9cs1GgfcTQeEnR2CVJNw893/rmqIG1KsNHmUiSFw= +helm.sh/helm/v3 v3.0.0/go.mod h1:sI7B9yfvMgxtTPMWdk1jSKJ2aa59UyP9qhPydqW6mgo= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +istio.io/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb/go.mod h1:eIDJ6jNk/IeJz6ODSksHl5Aiczy5JUq6vFhJWI5OtiI= +k8s.io/api v0.0.0-20180127130940-acf347b865f2/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= +k8s.io/api v0.0.0-20180904230853-4e7be11eab3f/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= +k8s.io/api v0.0.0-20190620084959-7cf5895f2711 h1:BblVYz/wE5WtBsD/Gvu54KyBUTJMflolzc5I2DTvh50= +k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= +k8s.io/api v0.0.0-20191004120104-195af9ec3521 h1:StP5An9aFEWfPckudvHEJc4q/WUDCUVGoZJrE/efGME= +k8s.io/api v0.0.0-20191004120104-195af9ec3521/go.mod h1:/L5qH+AD540e7Cetbui1tuJeXdmNhO8jM6VkXeDdDhQ= +k8s.io/api v0.0.0-20191016110408-35e52d86657a/go.mod h1:/L5qH+AD540e7Cetbui1tuJeXdmNhO8jM6VkXeDdDhQ= +k8s.io/api v0.0.0-20191121015604-11707872ac1c h1:Z87my3sF4WhG0OMxzARkWY/IKBtOr+MhXZAb4ts6qFc= +k8s.io/api v0.0.0-20191121015604-11707872ac1c/go.mod h1:R/s4gKT0V/cWEnbQa9taNRJNbWUK57/Dx6cPj6MD3A0= +k8s.io/apiextensions-apiserver v0.0.0-20190620085554-14e95df34f1f h1:+pHBUvIpLzm6H8VwRO+jMLcq5MIfaGq5xu/cBV676Ps= +k8s.io/apiextensions-apiserver v0.0.0-20190620085554-14e95df34f1f/go.mod h1:++XMkbLSSAutLgulnUnXW4kNbSkyQzlPL8PaW4hjJT4= +k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= +k8s.io/apiextensions-apiserver v0.0.0-20191016113550-5357c4baaf65/go.mod h1:5BINdGqggRXXKnDgpwoJ7PyQH8f+Ypp02fvVNcIFy9s= +k8s.io/apiextensions-apiserver v0.0.0-20191121021419-88daf26ec3b8 h1:SrFLwOURsuwzuCi0zJdaBbPF31AcV9JUwpwIVosnnE4= +k8s.io/apiextensions-apiserver v0.0.0-20191121021419-88daf26ec3b8/go.mod h1:NMIy5Wa/or8CsLhYRleOp9CWAHVdcWpzT6Ufx1SNVjA= +k8s.io/apiextensions-apiserver v0.0.0-20191204090712-e0e829f17bab h1:pu/YuiYiCpzZuoM+CCbMRg+6y/duiWp5QgD7MmmhtmQ= +k8s.io/apiextensions-apiserver v0.0.0-20191204090712-e0e829f17bab/go.mod h1:Qb+tQGRrWeCrrSvIaLLKYKH6S9XjI0enG9G23l2aBsw= +k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719 h1:uV4S5IB5g4Nvi+TBVNf3e9L4wrirlwYJ6w88jUQxTUw= +k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= +k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8 h1:Iieh/ZEgT3BWwbLD5qEKcY06jKuPEl6zC7gPSehoLw4= +k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8/go.mod h1:llRdnznGEAqC3DcNm6yEj472xaFVfLM7hnYofMb12tQ= +k8s.io/apimachinery v0.0.0-20191028221656-72ed19daf4bb h1:ZUNsbuPdXWrj0rZziRfCWcFg9ZP31OKkziqCbiphznI= +k8s.io/apimachinery v0.0.0-20191028221656-72ed19daf4bb/go.mod h1:llRdnznGEAqC3DcNm6yEj472xaFVfLM7hnYofMb12tQ= +k8s.io/apiserver v0.0.0-20190620085212-47dc9a115b18 h1:+C0wd/HnjyZ2I0SPqAy1cqfPoPxwZ0hUiNwj/EGTe6c= +k8s.io/apiserver v0.0.0-20190620085212-47dc9a115b18/go.mod h1:Hc9PbFVOsMigd7B7OiY/6bIRkR8y31eIKsr1D+JtKg4= +k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= +k8s.io/apiserver v0.0.0-20191016112112-5190913f932d/go.mod h1:7OqfAolfWxUM/jJ/HBLyE+cdaWFBUoo5Q5pHgJVj2ws= +k8s.io/apiserver v0.0.0-20191109104512-b243870e034b h1:05S1y1pQR/fnNkwdPdSsOrLWB8FtiN+2IoyClNHt5Sc= +k8s.io/apiserver v0.0.0-20191109104512-b243870e034b/go.mod h1:y7vTYID3PKiTpwtjcxINmM9H7nXak5mIYZGIRsdP+6o= +k8s.io/apiserver v0.0.0-20191121020624-6eed2f5a3289 h1:Q3JJ+ykeLSah/KJ8oilpnM5MtVRunvXfdGrl7xuazrI= +k8s.io/apiserver v0.0.0-20191121020624-6eed2f5a3289/go.mod h1:7P+0qMKoaggchirHLUSCVD22ohdkjN19+qQOKcAdfbI= +k8s.io/cli-runtime v0.0.0-20190620085706-2090e6d8f84c/go.mod h1:fkxp0BXLu9gu3r8x8X8gLrfDgWfqusKEJUnMUIqpDcg= +k8s.io/cli-runtime v0.0.0-20191004123735-6bff60de4370 h1:0fyyYer3AwQIwMRfqq0ycasAQ505R70yx5I9HcDC76o= +k8s.io/cli-runtime v0.0.0-20191004123735-6bff60de4370/go.mod h1:cmvr2HA8aRdxpbRtfP3kxIiK+nrsE1JDnR8KeFvblBE= +k8s.io/cli-runtime v0.0.0-20191016114015-74ad18325ed5 h1:8ZfMjkMBzcXEawLsYHg9lDM7aLEVso3NiVKfUTnN56A= +k8s.io/cli-runtime v0.0.0-20191016114015-74ad18325ed5/go.mod h1:sDl6WKSQkDM6zS1u9F49a0VooQ3ycYFBFLqd2jf2Xfo= +k8s.io/client-go v0.0.0-20190620085101-78d2af792bab h1:E8Fecph0qbNsAbijJJQryKu4Oi9QTp5cVpjTE+nqg6g= +k8s.io/client-go v0.0.0-20190620085101-78d2af792bab/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= +k8s.io/client-go v0.0.0-20191016111102-bec269661e48 h1:C2XVy2z0dV94q9hSSoCuTPp1KOG7IegvbdXuz9VGxoU= +k8s.io/client-go v0.0.0-20191016111102-bec269661e48/go.mod h1:hrwktSwYGI4JK+TJA3dMaFyyvHVi/aLarVHpbs8bgCU= +k8s.io/cloud-provider v0.0.0-20190620090043-8301c0bda1f0/go.mod h1:UXU55LeVTrjyQNw86sHjagiYhSZjYxWKXvx0Ml17KvM= +k8s.io/cloud-provider v0.0.0-20191004125000-f72359dfc58e/go.mod h1:L4PdZOzhwEyMxmDJj7U8QKxqWQLB0obP4HvoYpsxlrE= +k8s.io/cluster-bootstrap v0.0.0-20190620090013-c9a0fc045dc1/go.mod h1:cCRw3eZzlJdySYRtkL/N4cAClxYCzyrBL3V8cblTlUo= +k8s.io/cluster-bootstrap v0.0.0-20191004124811-493ca03acbc1/go.mod h1:iVBmJVKr6wSYz6U2HoOtYK1CTUvDpt2B4w+1cNFjRd0= +k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b/go.mod h1:G8bQwmHm2eafm5bgtX67XDZQ8CWKSGu9DekI+yN4Y5I= +k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= +k8s.io/code-generator v0.0.0-20191004115455-8e001e5d1894/go.mod h1:mJUgkl06XV4kstAnLHAIzJPVCOzVR+ZcfPIv4fUsFCY= +k8s.io/code-generator v0.0.0-20191114215150-2a85f169f05f/go.mod h1:Vh0irzg7dL9pFS4c8hFsali5txtbmse3MFS4zEH7Thg= +k8s.io/code-generator v0.0.0-20191121015212-c4c8f8345c7e/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= +k8s.io/component-base v0.0.0-20190620085130-185d68e6e6ea h1:CAN9Jo6bb5+mp3s1/1w8TbaWIxYK1WGQwwYvlacSet4= +k8s.io/component-base v0.0.0-20190620085130-185d68e6e6ea/go.mod h1:VLedAFwENz2swOjm0zmUXpAP2mV55c49xgaOzPBI/QQ= +k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= +k8s.io/component-base v0.0.0-20191004121439-41066ddd0b23 h1:AH0Pb7Qg64ddGoFbz40Qk1ahRz2SrwobhOfR1rUBetQ= +k8s.io/component-base v0.0.0-20191004121439-41066ddd0b23/go.mod h1:9R0GX/ZjvQBIzteo+978HZ8AyiJkJeSPhGreRhUngDg= +k8s.io/component-base v0.0.0-20191016111319-039242c015a9/go.mod h1:SuWowIgd/dtU/m/iv8OD9eOxp3QZBBhTIiWMsBQvKjI= +k8s.io/component-base v0.0.0-20191121020327-771114ba3383 h1:2E9cejJrGDZig6MS/+soBT55PQ8YfeZgdlgWVwekMOk= +k8s.io/component-base v0.0.0-20191121020327-771114ba3383/go.mod h1:tv9ITs6VEFWkF+kHwY4GiFvDr9vUGKJ4X/8+Z+oqVLk= +k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1/go.mod h1:K6Ux7uDbzKhacgqW0OJg3rjXk/SR9kprCPfSUDXGB5A= +k8s.io/cri-api v0.0.0-20190828162817-608eb1dad4ac/go.mod h1:BvtUaNBr0fEpzb11OfrQiJLsLPtqbmulpo1fPwcpP6Q= +k8s.io/csi-translation-lib v0.0.0-20190620090116-299a7b270edc/go.mod h1:L51Xd2IwQCsOBx41c4YZR9dY1h1IjMk8r3Nnv3L80KM= +k8s.io/csi-translation-lib v0.0.0-20191004125145-7118cc13aa0a/go.mod h1:H9j2pSdnK0m1JSh3HKkw0/I+cd8vZXn88Q+5wVYdwY0= +k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.4.0 h1:lCJCxf/LIowc2IGS9TPjWDyXY4nOmdGdfcwwDQCOURQ= +k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/kube-aggregator v0.0.0-20190620085325-f29e2b4a4f84/go.mod h1:S8URgD5o6oGCoLP9lx6oAdxWB9Ovtq9KLU9cYmU08QI= +k8s.io/kube-aggregator v0.0.0-20191104231939-9e18019dec40/go.mod h1:l5uvwN+kdpmQ/fBgp0YmfrD8U7nlcNa/oPnMJS3LFnw= +k8s.io/kube-controller-manager v0.0.0-20190620085942-b7f18460b210/go.mod h1:FoQCodL0eAmdwbZuu2/fi7nVEh3xE4SpomwLaGO4V74= +k8s.io/kube-controller-manager v0.0.0-20191004124629-b9859bb1ce71/go.mod h1:Rc3iipQlHUI0kP4WagehrV5gJ0+hkPEVl15wBhxr200= +k8s.io/kube-openapi v0.0.0-20180501212615-f08db293d3ef/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= +k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf h1:EYm5AW/UUDbnmnI+gK0TJDVK9qPLhM+sRHYanNKw0EQ= +k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d h1:Xpe6sK+RY4ZgCTyZ3y273UmFmURhjtoJiwOMbQsXitY= +k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-proxy v0.0.0-20190620085809-589f994ddf7f/go.mod h1:EP2frUhhC4rizGpCTYCnVS4+XZMh7Hyq40jOUvuAK5g= +k8s.io/kube-proxy v0.0.0-20191004124112-c4ee2f9e1e0a/go.mod h1:f9/YeP83LO6b9iJ+4ois7WOSG+ul+r3A5/yBeexdRWA= +k8s.io/kube-scheduler v0.0.0-20190620085912-4acac5405ec6/go.mod h1:ktfBNqjRdtYUw2eFNk32TtxiGqOy00eiWua74iNEcLg= +k8s.io/kube-scheduler v0.0.0-20191004124444-89f3bbd82341/go.mod h1:pvgFRWtLDJZOjLLKkg1mmb2iHSNd92D/mXoxSZF7MgM= +k8s.io/kubectl v0.0.0-20191004125858-14647fd13a8b h1:dW7vtK79PAzsWe1IC4zpCKhHQm7sPajh6LTkZsSs5JM= +k8s.io/kubectl v0.0.0-20191004125858-14647fd13a8b/go.mod h1:AuXBzQkjuIixhArqkutO92PWYEma7aDVAxAWCxX9dmM= +k8s.io/kubectl v0.0.0-20191016120415-2ed914427d51 h1:RBkTKVMF+xsNsSOVc0+HdC0B5gD1sr6s6Cu5w9qNbuQ= +k8s.io/kubectl v0.0.0-20191016120415-2ed914427d51/go.mod h1:gL826ZTIfD4vXTGlmzgTbliCAT9NGiqpCqK2aNYv5MQ= +k8s.io/kubelet v0.0.0-20190620085838-f1cb295a73c9/go.mod h1:2gRsvblRTyHIsBazBlnqeAWkWRtnUq6cBnrfdPFr9iY= +k8s.io/kubelet v0.0.0-20191004124258-ac1ea479bd3a/go.mod h1:AEFlJl65k3+YT00ONUjdegSLSWnjragLyC6DijaZfcg= +k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/kubernetes v1.13.2 h1:rBz6dubDY4bfv85G6zo04v9G5wniTxvBI9yQ/QxJS3g= +k8s.io/kubernetes v1.13.2/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/kubernetes v1.15.0 h1:0P6jAdZ1cF5/wSc14HqHCjWlbnwYzmFJBYeXBezZEE0= +k8s.io/kubernetes v1.15.0/go.mod h1:3RE5ikMc73WK+dSxk4pQuQ6ZaJcPXiZX2dj98RcdCuM= +k8s.io/kubernetes v1.16.2 h1:k0f/OVp6Yfv+UMTm6VYKhqjRgcvHh4QhN9coanjrito= +k8s.io/kubernetes v1.16.2/go.mod h1:SmhGgKfQ30imqjFVj8AI+iW+zSyFsswNErKYeTfgoH0= +k8s.io/legacy-cloud-providers v0.0.0-20190620090156-2138f2c9de18/go.mod h1:cgNZX1LyZbr0mW8MxxlgvFU2D3k1KDTlH/EgMuiQbGc= +k8s.io/legacy-cloud-providers v0.0.0-20191203122058-2ae7e9ca8470/go.mod h1:oNfOGYbYGPOfTw3pS1S5lBdaWEcpDHeaGPz973geIKA= +k8s.io/metrics v0.0.0-20190620085625-3b22d835f165/go.mod h1:98M2pmJXrzr0W4o9N5ptSvZMygAMRVvyPr2vq7aRwT4= +k8s.io/metrics v0.0.0-20191004123543-798934cf5e10/go.mod h1:ui7Lg0m5Dbrsr8+qf1SvbSYusC0vUN8GjGT1NW/BMdE= +k8s.io/metrics v0.0.0-20191016113814-3b1a734dba6e/go.mod h1:ve7/vMWeY5lEBkZf6Bt5TTbGS3b8wAxwGbdXAsufjRs= +k8s.io/repo-infra v0.0.0-20181204233714-00fe14e3d1a3/go.mod h1:+G1xBfZDfVFsm1Tj/HNCvg4QqWx8rJ2Fxpqr1rqp/gQ= +k8s.io/sample-apiserver v0.0.0-20190620085408-1aef9010884e/go.mod h1:uGtJFD6/KTth+Ed9NNWF8lMf5m1ued/X6qUuACRrBTs= +k8s.io/sample-apiserver v0.0.0-20191028231949-ceef03da3009/go.mod h1:b6UAWo5ctQk+oXxep2BKzgMbdD0KmPk+C2+aDnVVuxs= +k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE= +k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20191010214722-8d271d903fe4/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo= +k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +knative.dev/pkg v0.0.0-20191203174735-3444316bdeef h1:hFv6ufBVguD0j3RoKUUYrXMVyk+DhMfX23MvxjaSWV4= +knative.dev/pkg v0.0.0-20191203174735-3444316bdeef/go.mod h1:pgODObA1dTyhNoFxPZTTjNWfx6F0aKsKzn+vaT9XO/Q= +knative.dev/serving v0.10.0 h1:T1csznAQrc/DvCE4KROz4NqOtJ24mnU9eF9RMeeYaCc= +knative.dev/serving v0.10.0/go.mod h1:x2n255JS2XBI39tmjZ8CwTxIf9EKNMCrkVuiOttLRm0= +layeh.com/radius v0.0.0-20190322222518-890bc1058917 h1:BDXFaFzUt5EIqe/4wrTc4AcYZWP6iC6Ult+jQWLh5eU= +layeh.com/radius v0.0.0-20190322222518-890bc1058917/go.mod h1:fywZKyu//X7iRzaxLgPWsvc0L26IUpVvE/aeIL2JtIQ= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/letsencrypt v0.0.1 h1:DV0d09Ne9E7UUa9ZqWktZ9L2VmybgTgfq7xlfFR/bbU= +rsc.io/letsencrypt v0.0.1/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= +sigs.k8s.io/controller-runtime v0.4.0 h1:wATM6/m+3w8lj8FXNaO6Fs/rq/vqoOjO1Q116Z9NPsg= +sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= +sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= +sigs.k8s.io/structured-merge-diff v0.0.0-20190302045857-e85c7b244fd2/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= +sigs.k8s.io/testing_frameworks v0.1.2 h1:vK0+tvjF0BZ/RYFeZ1E6BYBwHJJXhjuZ3TdsEKH+UQM= +sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= +sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/hack/utils/oss_compliance/third_party_licenses.txt b/hack/utils/oss_compliance/third_party_licenses.txt index 489083a01c9..fc881bb39af 100644 --- a/hack/utils/oss_compliance/third_party_licenses.txt +++ b/hack/utils/oss_compliance/third_party_licenses.txt @@ -1,5 +1,31 @@ --- Index: 0 +Package: github.com/cespare/xxhash +License: +Copyright (c) 2016 Caleb Spare + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +--- +Index: 1 Package: github.com/solo-io/gloo License: Apache License @@ -204,8 +230,8 @@ Apache License See the License for the specific language governing permissions and limitations under the License. --- -Index: 1 -Package: github.com/solo-io/gloo/vendor/cloud.google.com/go/compute/metadata +Index: 2 +Package: github.com/solo-io/gloo/vendor/cloud.google.com/go License: Apache License @@ -410,7 +436,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 2 +Index: 3 Package: github.com/solo-io/gloo/vendor/contrib.go.opencensus.io/exporter/prometheus License: Apache License @@ -615,7 +641,213 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 3 +Index: 4 +Package: github.com/solo-io/gloo/vendor/contrib.go.opencensus.io/exporter/stackdriver/monitoredresource +License: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. +--- +Index: 5 Package: github.com/solo-io/gloo/vendor/github.com/Azure/go-autorest License: @@ -810,7 +1042,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 4 +Index: 6 Package: github.com/solo-io/gloo/vendor/github.com/PuerkitoBio/purell License: Copyright (c) 2012, Martin Angers @@ -826,7 +1058,7 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 5 +Index: 7 Package: github.com/solo-io/gloo/vendor/github.com/PuerkitoBio/urlesc License: Copyright (c) 2012 The Go Authors. All rights reserved. @@ -857,7 +1089,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 6 +Index: 8 Package: github.com/solo-io/gloo/vendor/github.com/armon/go-metrics License: The MIT License (MIT) @@ -881,7 +1113,7 @@ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 7 +Index: 9 Package: github.com/solo-io/gloo/vendor/github.com/asaskevich/govalidator License: The MIT License (MIT) @@ -905,7 +1137,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--- -Index: 8 +Index: 10 Package: github.com/solo-io/gloo/vendor/github.com/avast/retry-go License: MIT License @@ -930,7 +1162,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 9 +Index: 11 Package: github.com/solo-io/gloo/vendor/github.com/aws/aws-sdk-go License: @@ -1136,7 +1368,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 10 +Index: 12 Package: github.com/solo-io/gloo/vendor/github.com/beorn7/perks/quantile License: Copyright (C) 2013 Blake Mizerany @@ -1160,7 +1392,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 11 +Index: 13 Package: github.com/solo-io/gloo/vendor/github.com/census-instrumentation/opencensus-proto/gen-go License: @@ -1366,14 +1598,14 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 12 +Index: 14 Package: github.com/solo-io/gloo/vendor/github.com/davecgh/go-spew/spew License: ISC License Copyright (c) 2012-2016 Dave Collins -Permission to use, copy, modify, and distribute this software for any +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. @@ -1385,7 +1617,7 @@ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --- -Index: 13 +Index: 15 Package: github.com/solo-io/gloo/vendor/github.com/dgrijalva/jwt-go License: Copyright (c) 2012 Dave Grijalva @@ -1397,7 +1629,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 14 +Index: 16 Package: github.com/solo-io/gloo/vendor/github.com/envoyproxy/go-control-plane License: Apache License @@ -1602,7 +1834,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 15 +Index: 17 Package: github.com/solo-io/gloo/vendor/github.com/envoyproxy/protoc-gen-validate/validate License: @@ -1808,7 +2040,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 16 +Index: 18 Package: github.com/solo-io/gloo/vendor/github.com/evanphx/json-patch License: Copyright (c) 2014, Evan Phoenix @@ -1837,7 +2069,7 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 17 +Index: 19 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/analysis/internal License: @@ -2043,7 +2275,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 18 +Index: 20 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/errors License: @@ -2249,7 +2481,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 19 +Index: 21 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/jsonpointer License: @@ -2455,7 +2687,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 20 +Index: 22 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/jsonreference License: @@ -2661,7 +2893,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 21 +Index: 23 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/loads License: @@ -2867,7 +3099,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 22 +Index: 24 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/spec License: @@ -3073,7 +3305,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 23 +Index: 25 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/strfmt License: @@ -3279,7 +3511,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 24 +Index: 26 Package: github.com/solo-io/gloo/vendor/github.com/go-openapi/swag License: @@ -3485,7 +3717,239 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 25 +Index: 27 +Package: github.com/solo-io/gloo/vendor/github.com/go-stack/stack +License: +The MIT License (MIT) + +Copyright (c) 2014 Chris Hines + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +--- +Index: 28 +Package: github.com/solo-io/gloo/vendor/github.com/gogo/googleapis/google/api +License: +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2015, Google Inc + Copyright 2018, GoGo 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. + +--- +Index: 29 Package: github.com/solo-io/gloo/vendor/github.com/gogo/protobuf License: Copyright (c) 2013, The GoGo Authors. All rights reserved. @@ -3524,7 +3988,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 26 +Index: 30 Package: github.com/solo-io/gloo/vendor/github.com/golang/groupcache/lru License: Apache License @@ -3719,7 +4183,7 @@ third-party archives. See the License for the specific language governing permissions and limitations under the License. --- -Index: 27 +Index: 31 Package: github.com/solo-io/gloo/vendor/github.com/golang/mock/gomock License: @@ -3925,7 +4389,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 28 +Index: 32 Package: github.com/solo-io/gloo/vendor/github.com/golang/protobuf License: Copyright 2010 The Go Authors. All rights reserved. @@ -3957,7 +4421,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 29 +Index: 33 Package: github.com/solo-io/gloo/vendor/github.com/golang/snappy License: Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. @@ -3988,213 +4452,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 30 -Package: github.com/solo-io/gloo/vendor/github.com/google/btree -License: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. ---- -Index: 31 +Index: 34 Package: github.com/solo-io/gloo/vendor/github.com/google/go-cmp/cmp/internal License: Copyright (c) 2017 The Go Authors. All rights reserved. @@ -4225,7 +4483,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 32 +Index: 35 Package: github.com/solo-io/gloo/vendor/github.com/google/go-containerregistry/pkg/name License: @@ -4430,7 +4688,7 @@ License: 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.--- -Index: 33 +Index: 36 Package: github.com/solo-io/gloo/vendor/github.com/google/gofuzz License: @@ -4636,7 +4894,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 34 +Index: 37 Package: github.com/solo-io/gloo/vendor/github.com/google/uuid License: Copyright (c) 2009,2014 Google Inc. All rights reserved. @@ -4667,7 +4925,38 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 35 +Index: 38 +Package: github.com/solo-io/gloo/vendor/github.com/googleapis/gax-go/v2 +License: +Copyright 2016, Google Inc. +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 39 Package: github.com/solo-io/gloo/vendor/github.com/googleapis/gnostic License: @@ -4874,7 +5163,7 @@ License: limitations under the License. --- -Index: 36 +Index: 40 Package: github.com/solo-io/gloo/vendor/github.com/gophercloud/gophercloud License: Copyright 2012-2013 Rackspace, Inc. @@ -5069,10 +5358,10 @@ specific language governing permissions and limitations under the License. END OF TERMS AND CONDITIONS --- -Index: 37 +Index: 41 Package: github.com/solo-io/gloo/vendor/github.com/gorilla/mux License: -Copyright (c) 2012 Rodrigo Moraes. All rights reserved. +Copyright (c) 2012-2018 The Gorilla Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -5100,22 +5389,12 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 38 -Package: github.com/solo-io/gloo/vendor/github.com/gregjones/httpcache/diskcache +Index: 42 +Package: github.com/solo-io/gloo/vendor/github.com/grpc-ecosystem/go-grpc-middleware License: -Copyright © 2012 Greg Jones (greg.jones@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--- -Index: 39 -Package: github.com/solo-io/gloo/vendor/github.com/grpc-ecosystem/go-grpc-middleware -License: - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -5314,7 +5593,7 @@ License: 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.--- -Index: 40 +Index: 43 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/consul/api License: Mozilla Public License, version 2.0 @@ -5672,7 +5951,7 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice the Mozilla Public License, v. 2.0. --- -Index: 41 +Index: 44 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/errwrap License: Mozilla Public License, version 2.0 @@ -6030,7 +6309,7 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice the Mozilla Public License, v. 2.0. --- -Index: 42 +Index: 45 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/go-cleanhttp License: Mozilla Public License, version 2.0 @@ -6397,7 +6676,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice the Mozilla Public License, v. 2.0. --- -Index: 43 +Index: 46 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/go-immutable-radix License: Mozilla Public License, version 2.0 @@ -6764,7 +7043,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice the Mozilla Public License, v. 2.0. --- -Index: 44 +Index: 47 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/go-multierror License: Mozilla Public License, version 2.0 @@ -7121,7 +7400,7 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0. --- -Index: 45 +Index: 48 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/go-retryablehttp License: Mozilla Public License, version 2.0 @@ -7488,7 +7767,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice the Mozilla Public License, v. 2.0. --- -Index: 46 +Index: 49 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/go-rootcerts License: Mozilla Public License, version 2.0 @@ -7855,7 +8134,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice the Mozilla Public License, v. 2.0. --- -Index: 47 +Index: 50 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/go-sockaddr License: Mozilla Public License Version 2.0 @@ -8232,7 +8511,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. --- -Index: 48 +Index: 51 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/golang-lru/simplelru License: Mozilla Public License, version 2.0 @@ -8598,7 +8877,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. --- -Index: 49 +Index: 52 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/hcl License: Mozilla Public License, version 2.0 @@ -8956,7 +9235,7 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice the Mozilla Public License, v. 2.0. --- -Index: 50 +Index: 53 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/serf/coordinate License: Mozilla Public License, version 2.0 @@ -9314,7 +9593,7 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice the Mozilla Public License, v. 2.0. --- -Index: 51 +Index: 54 Package: github.com/solo-io/gloo/vendor/github.com/hashicorp/vault License: Mozilla Public License, version 2.0 @@ -9681,7 +9960,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice the Mozilla Public License, v. 2.0. --- -Index: 52 +Index: 55 Package: github.com/solo-io/gloo/vendor/github.com/imdario/mergo License: Copyright (c) 2013 Dario Castañé. All rights reserved. @@ -9713,7 +9992,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 53 +Index: 56 Package: github.com/solo-io/gloo/vendor/github.com/jhump/protoreflect License: @@ -9919,7 +10198,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 54 +Index: 57 Package: github.com/solo-io/gloo/vendor/github.com/json-iterator/go License: MIT License @@ -9944,7 +10223,32 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 55 +Index: 58 +Package: github.com/solo-io/gloo/vendor/github.com/k0kubun/pp +License: +The MIT License (MIT) + +Copyright (c) 2015 Takashi Kokubun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--- +Index: 59 Package: github.com/solo-io/gloo/vendor/github.com/kelseyhightower/envconfig License: Copyright (c) 2013 Kelsey Hightower @@ -9967,7 +10271,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 56 +Index: 60 Package: github.com/solo-io/gloo/vendor/github.com/mailru/easyjson License: Copyright (c) 2016 Mail.Ru Group @@ -9978,7 +10282,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 57 +Index: 61 Package: github.com/solo-io/gloo/vendor/github.com/mattbaird/jsonpatch License: Apache License @@ -10184,7 +10488,7 @@ License: limitations under the License. --- -Index: 58 +Index: 62 Package: github.com/solo-io/gloo/vendor/github.com/mattn/go-colorable License: The MIT License (MIT) @@ -10209,7 +10513,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 59 +Index: 63 Package: github.com/solo-io/gloo/vendor/github.com/mattn/go-isatty License: Copyright (c) Yasuhiro MATSUMOTO @@ -10222,7 +10526,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 60 +Index: 64 Package: github.com/solo-io/gloo/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil License: Apache License @@ -10427,7 +10731,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 61 +Index: 65 Package: github.com/solo-io/gloo/vendor/github.com/mitchellh/hashstructure License: The MIT License (MIT) @@ -10452,7 +10756,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 62 +Index: 66 Package: github.com/solo-io/gloo/vendor/github.com/mitchellh/mapstructure License: The MIT License (MIT) @@ -10477,7 +10781,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 63 +Index: 67 Package: github.com/solo-io/gloo/vendor/github.com/modern-go/concurrent License: Apache License @@ -10682,7 +10986,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 64 +Index: 68 Package: github.com/solo-io/gloo/vendor/github.com/modern-go/reflect2 License: Apache License @@ -10887,7 +11191,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 65 +Index: 69 Package: github.com/solo-io/gloo/vendor/github.com/pelletier/go-toml License: The MIT License (MIT) @@ -10912,30 +11216,39 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 66 -Package: github.com/solo-io/gloo/vendor/github.com/peterbourgon/diskv +Index: 70 +Package: github.com/solo-io/gloo/vendor/github.com/pierrec/lz4/internal/xxh32 License: -Copyright (c) 2011-2012 Peter Bourgon +Copyright (c) 2015, Pierre Curto +All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of xxHash nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --- -Index: 67 +Index: 71 Package: github.com/solo-io/gloo/vendor/github.com/pkg/errors License: Copyright (c) 2015, Dave Cheney @@ -10962,7 +11275,7 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 68 +Index: 72 Package: github.com/solo-io/gloo/vendor/github.com/prometheus/client_golang/prometheus License: Apache License @@ -11167,7 +11480,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 69 +Index: 73 Package: github.com/solo-io/gloo/vendor/github.com/prometheus/client_model/go License: Apache License @@ -11372,7 +11685,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 70 +Index: 74 Package: github.com/solo-io/gloo/vendor/github.com/prometheus/common License: Apache License @@ -11577,8 +11890,8 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 71 -Package: github.com/solo-io/gloo/vendor/github.com/prometheus/procfs +Index: 75 +Package: github.com/solo-io/gloo/vendor/github.com/prometheus/procfs/internal License: Apache License Version 2.0, January 2004 @@ -11782,7 +12095,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 72 +Index: 76 Package: github.com/solo-io/gloo/vendor/github.com/radovskyb/watcher License: Copyright (c) 2016, Benjamin Radovsky. @@ -11813,7 +12126,7 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 73 +Index: 77 Package: github.com/solo-io/gloo/vendor/github.com/ryanuber/go-glob License: The MIT License (MIT) @@ -11838,7 +12151,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- -Index: 74 +Index: 78 Package: github.com/solo-io/gloo/vendor/github.com/solo-io/envoy-operator/pkg/downward License: Apache License @@ -12043,7 +12356,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 75 +Index: 79 Package: github.com/solo-io/gloo/vendor/github.com/solo-io/go-utils License: Apache License @@ -12248,7 +12561,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 76 +Index: 80 Package: github.com/solo-io/gloo/vendor/github.com/solo-io/reporting-client/pkg License: Apache License @@ -12453,7 +12766,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 77 +Index: 81 Package: github.com/solo-io/gloo/vendor/github.com/solo-io/solo-kit License: Apache License @@ -12658,7 +12971,7 @@ Apache License See the License for the specific language governing permissions and limitations under the License. --- -Index: 78 +Index: 82 Package: github.com/solo-io/gloo/vendor/github.com/spf13/pflag License: Copyright (c) 2012 Alex Ogier. All rights reserved. @@ -12690,10 +13003,9 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 79 -Package: github.com/solo-io/gloo/vendor/go.opencensus.io +Index: 83 +Package: github.com/solo-io/gloo/vendor/go.mongodb.org/mongo-driver License: - Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -12894,91 +13206,297 @@ License: 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.--- -Index: 80 -Package: github.com/solo-io/gloo/vendor/go.uber.org/atomic + limitations under the License. +--- +Index: 84 +Package: github.com/solo-io/gloo/vendor/go.opencensus.io License: -Copyright (c) 2016 Uber Technologies, Inc. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ---- -Index: 81 -Package: github.com/solo-io/gloo/vendor/go.uber.org/multierr -License: -Copyright (c) 2017 Uber Technologies, Inc. + 1. Definitions. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ---- -Index: 82 -Package: github.com/solo-io/gloo/vendor/go.uber.org/zap -License: -Copyright (c) 2016-2017 Uber Technologies, Inc. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ---- -Index: 83 -Package: github.com/solo-io/gloo/vendor/golang.org/x/crypto/ssh/terminal -License: -Copyright (c) 2009 The Go Authors. All rights reserved. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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.--- +Index: 85 +Package: github.com/solo-io/gloo/vendor/go.uber.org/atomic +License: +Copyright (c) 2016 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--- +Index: 86 +Package: github.com/solo-io/gloo/vendor/go.uber.org/multierr +License: +Copyright (c) 2017 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--- +Index: 87 +Package: github.com/solo-io/gloo/vendor/go.uber.org/zap +License: +Copyright (c) 2016-2017 Uber Technologies, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +--- +Index: 88 +Package: github.com/solo-io/gloo/vendor/golang.org/x/crypto +License: +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -12995,7 +13513,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 84 +Index: 89 Package: github.com/solo-io/gloo/vendor/golang.org/x/net License: Copyright (c) 2009 The Go Authors. All rights reserved. @@ -13026,7 +13544,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 85 +Index: 90 Package: github.com/solo-io/gloo/vendor/golang.org/x/oauth2 License: Copyright (c) 2009 The Go Authors. All rights reserved. @@ -13057,8 +13575,8 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 86 -Package: github.com/solo-io/gloo/vendor/golang.org/x/sync/errgroup +Index: 91 +Package: github.com/solo-io/gloo/vendor/golang.org/x/sync License: Copyright (c) 2009 The Go Authors. All rights reserved. @@ -13088,103 +13606,815 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 87 +Index: 92 Package: github.com/solo-io/gloo/vendor/golang.org/x/sys/unix License: Copyright (c) 2009 The Go Authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 93 +Package: github.com/solo-io/gloo/vendor/golang.org/x/text +License: +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 94 +Package: github.com/solo-io/gloo/vendor/golang.org/x/time/rate +License: +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 95 +Package: github.com/solo-io/gloo/vendor/golang.org/x/xerrors/internal +License: +Copyright (c) 2019 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 96 +Package: github.com/solo-io/gloo/vendor/google.golang.org/api +License: +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 97 +Package: github.com/solo-io/gloo/vendor/google.golang.org/genproto +License: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. +--- +Index: 98 +Package: github.com/solo-io/gloo/vendor/google.golang.org/grpc +License: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. +--- +Index: 99 +Package: github.com/solo-io/gloo/vendor/gopkg.in/inf.v0 +License: +Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--- +Index: 100 +Package: github.com/solo-io/gloo/vendor/gopkg.in/square/go-jose.v2 +License: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---- -Index: 88 -Package: github.com/solo-io/gloo/vendor/golang.org/x/text -License: -Copyright (c) 2009 The Go Authors. All rights reserved. + END OF TERMS AND CONDITIONS -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + APPENDIX: How to apply the Apache License to your work. - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---- -Index: 89 -Package: github.com/solo-io/gloo/vendor/golang.org/x/time/rate -License: -Copyright (c) 2009 The Go Authors. All rights reserved. + Copyright [yyyy] [name of copyright owner] -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: + 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 - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. + http://www.apache.org/licenses/LICENSE-2.0 -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + 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. --- -Index: 90 -Package: github.com/solo-io/gloo/vendor/golang.org/x/xerrors/internal +Index: 101 +Package: github.com/solo-io/gloo/vendor/gopkg.in/square/go-jose.v2/json License: -Copyright (c) 2019 The Go Authors. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -13212,10 +14442,9 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- -Index: 91 -Package: github.com/solo-io/gloo/vendor/google.golang.org/genproto/googleapis +Index: 102 +Package: github.com/solo-io/gloo/vendor/gopkg.in/yaml.v2 License: - Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13396,7 +14625,7 @@ License: APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -13404,7 +14633,7 @@ License: same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13418,8 +14647,8 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 92 -Package: github.com/solo-io/gloo/vendor/google.golang.org/grpc +Index: 103 +Package: github.com/solo-io/gloo/vendor/k8s.io/api License: Apache License @@ -13624,101 +14853,10 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 93 -Package: github.com/solo-io/gloo/vendor/gopkg.in/inf.v0 -License: -Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go -Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---- -Index: 94 -Package: github.com/solo-io/gloo/vendor/gopkg.in/mgo.v2/bson -License: -BSON library for Go - -Copyright (c) 2010-2012 - Gustavo Niemeyer - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---- -Index: 95 -Package: github.com/solo-io/gloo/vendor/gopkg.in/mgo.v2/internal/json +Index: 104 +Package: github.com/solo-io/gloo/vendor/k8s.io/apiextensions-apiserver/pkg License: -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---- -Index: 96 -Package: github.com/solo-io/gloo/vendor/gopkg.in/yaml.v2 -License: Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -13899,7 +15037,7 @@ License: APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -13907,7 +15045,7 @@ License: same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13921,8 +15059,8 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 97 -Package: github.com/solo-io/gloo/vendor/k8s.io/api +Index: 105 +Package: github.com/solo-io/gloo/vendor/k8s.io/apimachinery License: Apache License @@ -14127,8 +15265,8 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 98 -Package: github.com/solo-io/gloo/vendor/k8s.io/apiextensions-apiserver/pkg +Index: 106 +Package: github.com/solo-io/gloo/vendor/k8s.io/client-go License: Apache License @@ -14333,11 +15471,10 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 99 -Package: github.com/solo-io/gloo/vendor/k8s.io/apimachinery +Index: 107 +Package: github.com/solo-io/gloo/vendor/k8s.io/klog License: - - Apache License + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14517,7 +15654,7 @@ License: APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" + boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -14525,7 +15662,7 @@ License: same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2016 Istio Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14538,9 +15675,10 @@ License: 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. + --- -Index: 100 -Package: github.com/solo-io/gloo/vendor/k8s.io/client-go +Index: 108 +Package: github.com/solo-io/gloo/vendor/k8s.io/kube-openapi/pkg/util/proto License: Apache License @@ -14745,10 +15883,11 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 101 -Package: github.com/solo-io/gloo/vendor/k8s.io/klog +Index: 109 +Package: github.com/solo-io/gloo/vendor/k8s.io/utils License: - Apache License + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -14928,7 +16067,7 @@ License: APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -14936,7 +16075,7 @@ License: same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2016 Istio Authors + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14949,9 +16088,8 @@ License: 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. - --- -Index: 102 +Index: 110 Package: github.com/solo-io/gloo/vendor/knative.dev/pkg License: Apache License @@ -15156,7 +16294,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 103 +Index: 111 Package: github.com/solo-io/gloo/vendor/knative.dev/serving/pkg License: @@ -15362,7 +16500,7 @@ License: See the License for the specific language governing permissions and limitations under the License. --- -Index: 104 +Index: 112 Package: golang.org/x/tools/cmd/goimports License: Copyright (c) 2009 The Go Authors. All rights reserved. @@ -15392,7 +16530,7 @@ Copyright (c) 2009 The Go Authors. All rights reserved. THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--- -Index: 105 +Index: 113 Package: github.com/gogo/protobuf License: Copyright (c) 2013, The GoGo Authors. All rights reserved. @@ -15429,7 +16567,7 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--- -Index: 106 +Index: 114 Package: github.com/envoyproxy/envoy License: @@ -15634,7 +16772,7 @@ License: 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.--- -Index: 107 +Index: 115 Package: github.com/envoyproxy/protoc-gen-validate License: @@ -15839,7 +16977,7 @@ License: 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.--- -Index: 108 +Index: 116 Package: github.com/paulvollmer/2gobytes License: Copyright (C) 2013 Clint Caywood @@ -15850,7 +16988,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--- -Index: 109 +Index: 117 Package: github.com/golang/mock License: diff --git a/install/.gitignore b/install/.gitignore index f6b43dc6318..2462ab5e7cc 100644 --- a/install/.gitignore +++ b/install/.gitignore @@ -1,3 +1,3 @@ gloo-gateway.yaml gloo-knative.yaml -gloo-ingress.yaml +gloo-ingress.yaml \ No newline at end of file diff --git a/install/helm/README.md b/install/helm/README.md index 6f6c985644c..1073fa2c4c4 100644 --- a/install/helm/README.md +++ b/install/helm/README.md @@ -6,30 +6,14 @@ This go script takes the `*-template.yaml` files in this directory and performs to generate the following files: - `Chart.yaml`: contains information about the Gloo chart -- `values.yaml`: default configuration values for the chart, used to generate manifest for the `gateway` deployment option -- `values-ingress.yaml`: values used to generate the manifest for the `ingress` deployment option -- `values-knative.yaml`: values used to generate the manifest for the `knative` deployment option +- `values.yaml`: default configuration values for the chart Check the [Gloo docs](https://gloo.solo.io/installation/quick_start/#2-choosing-a-deployment-option) for a description of the different installation options. +## /crds +This directory contains the Gloo `CustomResourceDefinitions`. This is the +[required location](https://helm.sh/docs/topics/charts/#custom-resource-definitions-crds) for CRDs in Helm 3 charts. + ## /templates This directory contains the Helm templates used to generate the Gloo manifests. - -### CRDs -Custom Resource Definitions in the `template` directory must be annotated as Helm `crd-install` hooks: - -```yaml -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: some-crd-name - annotations: - "helm.sh/hook": crd-install -... -``` -This will avoid race conditions during the installation, i.e. situations where the CRDs are still pending when the -manifest (which creates instances of these CRDs) is applied. How this is implemented depends on the installation method: -- When installing with Helm, the hooks will be processed by `Tiller` before applying the rest of the manifest -- When installing with `glooctl`, the behavior is the same, but implemented client-side: `glooctl` first renders and -applies any CRD manifests, waits until they have been registered, and then applies the rest of the manifest. diff --git a/install/helm/gloo/crds/auth_config.yaml b/install/helm/gloo/crds/auth_config.yaml new file mode 100644 index 00000000000..61965250577 --- /dev/null +++ b/install/helm/gloo/crds/auth_config.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: authconfigs.enterprise.gloo.solo.io +spec: + group: enterprise.gloo.solo.io + names: + kind: AuthConfig + listKind: AuthConfigList + plural: authconfigs + shortNames: + - ac + singular: authconfig + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/crds/gateway.yaml b/install/helm/gloo/crds/gateway.yaml new file mode 100644 index 00000000000..3f71874b360 --- /dev/null +++ b/install/helm/gloo/crds/gateway.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: gateways.gateway.solo.io +spec: + group: gateway.solo.io + names: + kind: Gateway + listKind: GatewayList + plural: gateways + shortNames: + - gw + singular: gateway + scope: Namespaced + version: v1 + versions: + - name: v1 + storage: true + served: true diff --git a/install/helm/gloo/crds/proxy.yaml b/install/helm/gloo/crds/proxy.yaml new file mode 100644 index 00000000000..941c635e142 --- /dev/null +++ b/install/helm/gloo/crds/proxy.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: proxies.gloo.solo.io +spec: + group: gloo.solo.io + names: + kind: Proxy + listKind: ProxyList + plural: proxies + shortNames: + - px + singular: proxy + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/crds/route_table.yaml b/install/helm/gloo/crds/route_table.yaml new file mode 100644 index 00000000000..8a430ee37f6 --- /dev/null +++ b/install/helm/gloo/crds/route_table.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: routetables.gateway.solo.io +spec: + group: gateway.solo.io + names: + kind: RouteTable + listKind: RouteTableList + plural: routetables + shortNames: + - rt + singular: routetable + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/crds/settings.yaml b/install/helm/gloo/crds/settings.yaml new file mode 100644 index 00000000000..258ee30a64e --- /dev/null +++ b/install/helm/gloo/crds/settings.yaml @@ -0,0 +1,20 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: settings.gloo.solo.io + labels: + gloo: settings +spec: + group: gloo.solo.io + names: + kind: Settings + listKind: SettingsList + plural: settings + shortNames: + - st + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/crds/upstream.yaml b/install/helm/gloo/crds/upstream.yaml new file mode 100644 index 00000000000..fb0c5d79c41 --- /dev/null +++ b/install/helm/gloo/crds/upstream.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: upstreams.gloo.solo.io +spec: + group: gloo.solo.io + names: + kind: Upstream + listKind: UpstreamList + plural: upstreams + shortNames: + - us + singular: upstream + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/crds/upstream_group.yaml b/install/helm/gloo/crds/upstream_group.yaml new file mode 100644 index 00000000000..535be611b45 --- /dev/null +++ b/install/helm/gloo/crds/upstream_group.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: upstreamgroups.gloo.solo.io +spec: + group: gloo.solo.io + names: + kind: UpstreamGroup + listKind: UpstreamGroupList + plural: upstreamgroups + shortNames: + - ug + singular: upstreamgroup + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/crds/virtual_service.yaml b/install/helm/gloo/crds/virtual_service.yaml new file mode 100644 index 00000000000..7c4f188e14a --- /dev/null +++ b/install/helm/gloo/crds/virtual_service.yaml @@ -0,0 +1,19 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: virtualservices.gateway.solo.io +spec: + group: gateway.solo.io + names: + kind: VirtualService + listKind: VirtualServiceList + plural: virtualservices + shortNames: + - vs + singular: virtualservice + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true diff --git a/install/helm/gloo/generate.go b/install/helm/gloo/generate.go index 6de0bf8a8a5..c064f6c7cb5 100644 --- a/install/helm/gloo/generate.go +++ b/install/helm/gloo/generate.go @@ -12,15 +12,11 @@ import ( ) var ( - valuesTemplate = "install/helm/gloo/values-gateway-template.yaml" - valuesOutput = "install/helm/gloo/values.yaml" - docsOutput = "docs/content/installation/gateway/kubernetes/values.txt" - knativeValuesTemplate = "install/helm/gloo/values-knative-template.yaml" - knativeValuesOutput = "install/helm/gloo/values-knative.yaml" - ingressValuesTemplate = "install/helm/gloo/values-ingress-template.yaml" - ingressValuesOutput = "install/helm/gloo/values-ingress.yaml" - chartTemplate = "install/helm/gloo/Chart-template.yaml" - chartOutput = "install/helm/gloo/Chart.yaml" + valuesTemplate = "install/helm/gloo/values-template.yaml" + valuesOutput = "install/helm/gloo/values.yaml" + docsOutput = "docs/content/installation/gateway/kubernetes/values.txt" + chartTemplate = "install/helm/gloo/Chart-template.yaml" + chartOutput = "install/helm/gloo/Chart.yaml" // For non-release builds, the string "dev" is used as the version devVersionTag = "dev" // Helm docs are generated during builds. Since version changes each build, substitute with descriptive text. @@ -46,23 +42,67 @@ func main() { } log.Printf("Generating helm files.") - if err := generateGatewayValuesYaml(version, repoPrefixOverride, globalPullPolicy); err != nil { + if err := generateValuesYaml(version, repoPrefixOverride, globalPullPolicy); err != nil { log.Fatalf("generating values.yaml failed!: %v", err) } - if err := generateGatewayValueDocs(helmDocsVersionText, repoPrefixOverride, globalPullPolicy); err != nil { + if err := generateValueDocs(helmDocsVersionText, repoPrefixOverride, globalPullPolicy); err != nil { log.Fatalf("generating values.yaml docs failed!: %v", err) } - if err := generateKnativeValuesYaml(version, repoPrefixOverride, globalPullPolicy); err != nil { - log.Fatalf("generating values-knative.yaml failed!: %v", err) - } - if err := generateIngressValuesYaml(version, repoPrefixOverride, globalPullPolicy); err != nil { - log.Fatalf("generating values-ingress.yaml failed!: %v", err) - } if err := generateChartYaml(version); err != nil { log.Fatalf("generating Chart.yaml failed!: %v", err) } } +func generateValuesYaml(version, repositoryPrefix, globalPullPolicy string) error { + cfg, err := generateValuesConfig(version, repositoryPrefix, globalPullPolicy) + if err != nil { + return err + } + + // customize config as needed for dev builds + if version == devVersionTag { + cfg.Gloo.Deployment.Image.PullPolicy = always + cfg.Discovery.Deployment.Image.PullPolicy = always + cfg.Gateway.Deployment.Image.PullPolicy = always + cfg.Gateway.CertGenJob.Image.PullPolicy = always + + cfg.AccessLogger.Image.PullPolicy = always + + cfg.Ingress.Deployment.Image.PullPolicy = always + cfg.IngressProxy.Deployment.Image.PullPolicy = always + cfg.Settings.Integrations.Knative.Proxy.Image.PullPolicy = always + + for _, v := range cfg.GatewayProxies { + v.PodTemplate.Image.PullPolicy = always + } + } + + return writeYaml(cfg, valuesOutput) +} + +func generateValueDocs(version, repositoryPrefix, globalPullPolicy string) error { + cfg, err := generateValuesConfig(version, repositoryPrefix, globalPullPolicy) + if err != nil { + return err + } + + // customize config as needed for docs + // (currently only the version text differs, and this is passed as a function argument) + + return writeDocs(helmchart.Doc(cfg), docsOutput) +} + +func generateChartYaml(version string) error { + var chart generate.Chart + if err := readYaml(chartTemplate, &chart); err != nil { + return err + } + + chart.Version = version + + return writeYaml(&chart, chartOutput) +} + func readYaml(path string, obj interface{}) error { bytes, err := ioutil.ReadFile(path) if err != nil { @@ -97,7 +137,7 @@ func writeDocs(docs helmchart.HelmValues, path string) error { return nil } -func readGatewayConfig() (*generate.HelmConfig, error) { +func readValuesTemplate() (*generate.HelmConfig, error) { var config generate.HelmConfig if err := readYaml(valuesTemplate, &config); err != nil { return nil, err @@ -105,9 +145,8 @@ func readGatewayConfig() (*generate.HelmConfig, error) { return &config, nil } -// install with gateway only -func generateGatewayValuesConfig(version, repositoryPrefix, globalPullPolicy string) (*generate.HelmConfig, error) { - cfg, err := readGatewayConfig() +func generateValuesConfig(version, repositoryPrefix, globalPullPolicy string) (*generate.HelmConfig, error) { + cfg, err := readValuesTemplate() if err != nil { return nil, err } @@ -115,116 +154,16 @@ func generateGatewayValuesConfig(version, repositoryPrefix, globalPullPolicy str cfg.Gloo.Deployment.Image.Tag = version cfg.Discovery.Deployment.Image.Tag = version cfg.Gateway.Deployment.Image.Tag = version - if cfg.Gateway.CertGenJob != nil { - cfg.Gateway.CertGenJob.Image.Tag = version - } - cfg.AccessLogger.Image.Tag = version - - for _, v := range cfg.GatewayProxies { - v.PodTemplate.Image.Tag = version - } - - if repositoryPrefix != "" { - cfg.Global.Image.Registry = repositoryPrefix - } + cfg.Gateway.CertGenJob.Image.Tag = version - if globalPullPolicy != "" { - cfg.Global.Image.PullPolicy = globalPullPolicy - } - - return cfg, nil -} - -func generateGatewayValuesYaml(version, repositoryPrefix, globalPullPolicy string) error { - cfg, err := generateGatewayValuesConfig(version, repositoryPrefix, globalPullPolicy) - if err != nil { - return err - } - - // customize config as needed for dev builds - if version == devVersionTag { - cfg.Gloo.Deployment.Image.PullPolicy = always - cfg.Discovery.Deployment.Image.PullPolicy = always - cfg.Gateway.Deployment.Image.PullPolicy = always - cfg.AccessLogger.Image.PullPolicy = always - for _, v := range cfg.GatewayProxies { - v.PodTemplate.Image.PullPolicy = always - } - if cfg.Gateway.CertGenJob != nil { - cfg.Gateway.CertGenJob.Image.PullPolicy = always - } - } - - return writeYaml(cfg, valuesOutput) -} - -func generateGatewayValueDocs(version, repositoryPrefix, globalPullPolicy string) error { - cfg, err := generateGatewayValuesConfig(version, repositoryPrefix, globalPullPolicy) - if err != nil { - return err - } - - // customize config as needed for docs - // (currently only the version text differs, and this is passed as a function argument) - - return writeDocs(helmchart.Doc(cfg), docsOutput) -} - -// install with knative only -func generateKnativeValuesYaml(version, repositoryPrefix, globalPullPolicy string) error { - cfg, err := readGatewayConfig() - if err != nil { - return err - } - // overwrite any non-zero values - if err := readYaml(knativeValuesTemplate, &cfg); err != nil { - return err - } - - cfg.Gloo.Deployment.Image.Tag = version - cfg.Discovery.Deployment.Image.Tag = version - cfg.Ingress.Deployment.Image.Tag = version - cfg.Settings.Integrations.Knative.Proxy.Image.Tag = version - - if version == devVersionTag { - cfg.Gloo.Deployment.Image.PullPolicy = always - cfg.Discovery.Deployment.Image.PullPolicy = always - cfg.Ingress.Deployment.Image.PullPolicy = always - cfg.Settings.Integrations.Knative.Proxy.Image.PullPolicy = always - } - - if repositoryPrefix != "" { - cfg.Global.Image.Registry = repositoryPrefix - } - - if globalPullPolicy != "" { - cfg.Global.Image.PullPolicy = globalPullPolicy - } - - return writeYaml(&cfg, knativeValuesOutput) -} - -// install with ingress only -func generateIngressValuesYaml(version, repositoryPrefix, globalPullPolicy string) error { - cfg, err := readGatewayConfig() - if err != nil { - return err - } - // overwrite any non-zero values - if err := readYaml(ingressValuesTemplate, &cfg); err != nil { - return err - } + cfg.AccessLogger.Image.Tag = version - cfg.Gloo.Deployment.Image.Tag = version - cfg.Discovery.Deployment.Image.Tag = version cfg.Ingress.Deployment.Image.Tag = version cfg.IngressProxy.Deployment.Image.Tag = version + cfg.Settings.Integrations.Knative.Proxy.Image.Tag = version - if version == devVersionTag { - cfg.Gloo.Deployment.Image.PullPolicy = always - cfg.Discovery.Deployment.Image.PullPolicy = always - cfg.Ingress.Deployment.Image.PullPolicy = always - cfg.IngressProxy.Deployment.Image.PullPolicy = always + for _, v := range cfg.GatewayProxies { + v.PodTemplate.Image.Tag = version } if repositoryPrefix != "" { @@ -235,16 +174,5 @@ func generateIngressValuesYaml(version, repositoryPrefix, globalPullPolicy strin cfg.Global.Image.PullPolicy = globalPullPolicy } - return writeYaml(&cfg, ingressValuesOutput) -} - -func generateChartYaml(version string) error { - var chart generate.Chart - if err := readYaml(chartTemplate, &chart); err != nil { - return err - } - - chart.Version = version - - return writeYaml(&chart, chartOutput) + return cfg, nil } diff --git a/install/helm/gloo/generate/values.go b/install/helm/gloo/generate/values.go index 2cf25dd08a2..54d8eec6009 100644 --- a/install/helm/gloo/generate/values.go +++ b/install/helm/gloo/generate/values.go @@ -11,7 +11,6 @@ type HelmConfig struct { type Config struct { Namespace *Namespace `json:"namespace,omitempty"` - Crds *Crds `json:"crds,omitempty"` Settings *Settings `json:"settings,omitempty"` Gloo *Gloo `json:"gloo,omitempty"` Discovery *Discovery `json:"discovery,omitempty"` @@ -24,10 +23,9 @@ type Config struct { } type Global struct { - Image *Image `json:"image,omitempty"` - Extensions interface{} `json:"extensions,omitempty"` - GlooRbac *Rbac `json:"glooRbac,omitempty"` - GlooInstallationId string `json:"glooInstallationId" desc:"If not user-defined, will default to a random string. Used to track all the resources created in one installation to assist with uninstalling"` + Image *Image `json:"image,omitempty"` + Extensions interface{} `json:"extensions,omitempty"` + GlooRbac *Rbac `json:"glooRbac,omitempty"` } type Namespace struct { @@ -40,10 +38,6 @@ type Rbac struct { NameSuffix string `json:"nameSuffix" desc:"When nameSuffix is nonempty, append '-$nameSuffix' to the names of Gloo RBAC resources; e.g. when nameSuffix is 'foo', the role 'gloo-resource-reader' will become 'gloo-resource-reader-foo'"` } -type Crds struct { - Create bool `json:"create" desc:"create CRDs for Gloo (turn off if installing with Helm to a cluster that already has Gloo CRDs)"` -} - // Common type Image struct { Tag string `json:"tag,omitempty" desc:"tag for the container"` @@ -72,7 +66,7 @@ type JobSpec struct { type DeploymentSpec struct { Replicas int `json:"replicas" desc:"number of instances to deploy"` - Resources *ResourceRequirements `json:"resources,omitEmpty" desc:"resources for the main pod in the deployment"` + Resources *ResourceRequirements `json:"resources,omitempty" desc:"resources for the main pod in the deployment"` } type Integrations struct { @@ -100,7 +94,7 @@ type Settings struct { Create bool `json:"create" desc:"create a Settings CRD which provides bootstrap configuration to Gloo controllers"` Extensions interface{} `json:"extensions,omitempty"` SingleNamespace bool `json:"singleNamespace" desc:"Enable to use install namespace as WatchNamespace and WriteNamespace"` - InvalidConfigPolicy *InvalidConfigPolicy `json:"invalidConfigPolicy" desc:"Define policies for Gloo to handle invalid configuration"` + InvalidConfigPolicy *InvalidConfigPolicy `json:"invalidConfigPolicy,omitempty" desc:"Define policies for Gloo to handle invalid configuration"` Linkerd bool `json:"linkerd" desc:"Enable automatic Linkerd integration in Gloo."` } @@ -226,7 +220,7 @@ type GatewayProxyPodTemplate struct { NodeSelector map[string]string `json:"nodeSelector,omitempty" desc:"label selector for nodes"` Tolerations []*appsv1.Toleration `json:"tolerations,omitEmpty"` Probes bool `json:"probes" desc:"enable liveness and readiness probes"` - Resources *ResourceRequirements `json:"resources"` + Resources *ResourceRequirements `json:"resources,omitempty"` DisableNetBind bool `json:"disableNetBind" desc:"don't add the NET_BIND_SERVICE capability to the pod. This means that the gateway proxy will not be able to bind to ports below 1024"` RunUnprivileged bool `json:"runUnprivileged" desc:"run envoy as an unprivileged user"` FloatingUserId bool `json:"floatingUserId" desc:"set to true to allow the cluster to dynamically assign a user ID"` diff --git a/install/helm/gloo/templates/0-namespace.yaml b/install/helm/gloo/templates/0-namespace.yaml index 8ee5d84d82e..92a37f9de3f 100644 --- a/install/helm/gloo/templates/0-namespace.yaml +++ b/install/helm/gloo/templates/0-namespace.yaml @@ -5,8 +5,6 @@ metadata: name: {{ .Release.Namespace }} labels: app: gloo - installationId: {{ include "gloo.installationId" . }} annotations: "helm.sh/hook": pre-install - "helm.sh/hook-weight": "0" {{- end}} \ No newline at end of file diff --git a/install/helm/gloo/templates/1-gloo-deployment.yaml b/install/helm/gloo/templates/1-gloo-deployment.yaml index 8977b371170..9567160f843 100644 --- a/install/helm/gloo/templates/1-gloo-deployment.yaml +++ b/install/helm/gloo/templates/1-gloo-deployment.yaml @@ -8,7 +8,6 @@ metadata: labels: app: gloo gloo: gloo - installationId: {{ include "gloo.installationId" . }} name: gloo namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/10-ingress-deployment.yaml b/install/helm/gloo/templates/10-ingress-deployment.yaml index 86aa8a790d8..e3b0813cafd 100644 --- a/install/helm/gloo/templates/10-ingress-deployment.yaml +++ b/install/helm/gloo/templates/10-ingress-deployment.yaml @@ -9,7 +9,6 @@ metadata: labels: app: gloo gloo: ingress - installationId: {{ include "gloo.installationId" $ }} name: ingress namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/100-gloo-crds.yaml b/install/helm/gloo/templates/100-gloo-crds.yaml deleted file mode 100644 index 7ed2acf7dd6..00000000000 --- a/install/helm/gloo/templates/100-gloo-crds.yaml +++ /dev/null @@ -1,194 +0,0 @@ -{{- if .Values.crds.create }} -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: settings.gloo.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - gloo: settings - installationId: {{ include "gloo.installationId" . }} -spec: - group: gloo.solo.io - names: - kind: Settings - listKind: SettingsList - plural: settings - shortNames: - - st - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: gateways.gateway.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: gateway.solo.io - names: - kind: Gateway - listKind: GatewayList - plural: gateways - shortNames: - - gw - singular: gateway - scope: Namespaced - version: v1 - versions: - - name: v1 - storage: true - served: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: virtualservices.gateway.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: gateway.solo.io - names: - kind: VirtualService - listKind: VirtualServiceList - plural: virtualservices - shortNames: - - vs - singular: virtualservice - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: routetables.gateway.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: gateway.solo.io - names: - kind: RouteTable - listKind: RouteTableList - plural: routetables - shortNames: - - rt - singular: routetable - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: proxies.gloo.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: gloo.solo.io - names: - kind: Proxy - listKind: ProxyList - plural: proxies - shortNames: - - px - singular: proxy - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: upstreams.gloo.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: gloo.solo.io - names: - kind: Upstream - listKind: UpstreamList - plural: upstreams - shortNames: - - us - singular: upstream - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: upstreamgroups.gloo.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: gloo.solo.io - names: - kind: UpstreamGroup - listKind: UpstreamGroupList - plural: upstreamgroups - shortNames: - - ug - singular: upstreamgroup - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: authconfigs.enterprise.gloo.solo.io - annotations: - "helm.sh/hook": crd-install - labels: - installationId: {{ include "gloo.installationId" . }} -spec: - group: enterprise.gloo.solo.io - names: - kind: AuthConfig - listKind: AuthConfigList - plural: authconfigs - shortNames: - - ac - singular: authconfig - scope: Namespaced - version: v1 - versions: - - name: v1 - served: true - storage: true ---- -{{- end}} \ No newline at end of file diff --git a/install/helm/gloo/templates/11-ingress-proxy-deployment.yaml b/install/helm/gloo/templates/11-ingress-proxy-deployment.yaml index 801e9ed2e96..642e75cddea 100644 --- a/install/helm/gloo/templates/11-ingress-proxy-deployment.yaml +++ b/install/helm/gloo/templates/11-ingress-proxy-deployment.yaml @@ -9,7 +9,6 @@ metadata: labels: app: gloo gloo: ingress-proxy - installationId: {{ include "gloo.installationId" . }} name: ingress-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/12-ingress-proxy-configmap.yaml b/install/helm/gloo/templates/12-ingress-proxy-configmap.yaml index 2a44f643589..2ca61e3c31b 100644 --- a/install/helm/gloo/templates/12-ingress-proxy-configmap.yaml +++ b/install/helm/gloo/templates/12-ingress-proxy-configmap.yaml @@ -8,7 +8,6 @@ metadata: labels: app: gloo gloo: ingress-proxy - installationId: {{ include "gloo.installationId" . }} data: {{ if (empty .Values.ingressProxy.configMap.data) }} envoy.yaml: | diff --git a/install/helm/gloo/templates/13-ingress-proxy-service.yaml b/install/helm/gloo/templates/13-ingress-proxy-service.yaml index 2ed0eecf994..583e8bcd5f3 100644 --- a/install/helm/gloo/templates/13-ingress-proxy-service.yaml +++ b/install/helm/gloo/templates/13-ingress-proxy-service.yaml @@ -5,7 +5,6 @@ metadata: labels: app: gloo gloo: ingress-proxy - installationId: {{ include "gloo.installationId" . }} name: ingress-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/14-clusteringress-proxy-deployment.yaml b/install/helm/gloo/templates/14-clusteringress-proxy-deployment.yaml index 6de4493eb90..10b7b7a562c 100644 --- a/install/helm/gloo/templates/14-clusteringress-proxy-deployment.yaml +++ b/install/helm/gloo/templates/14-clusteringress-proxy-deployment.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: clusteringress-proxy - installationId: {{ include "gloo.installationId" . }} name: clusteringress-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/15-clusteringress-proxy-configmap.yaml b/install/helm/gloo/templates/15-clusteringress-proxy-configmap.yaml index 3780e745f44..7f5581bdf19 100644 --- a/install/helm/gloo/templates/15-clusteringress-proxy-configmap.yaml +++ b/install/helm/gloo/templates/15-clusteringress-proxy-configmap.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: clusteringress-proxy - installationId: {{ include "gloo.installationId" . }} data: envoy.yaml: | node: diff --git a/install/helm/gloo/templates/16-clusteringress-proxy-service.yaml b/install/helm/gloo/templates/16-clusteringress-proxy-service.yaml index 5e58d44e793..406c040c96f 100644 --- a/install/helm/gloo/templates/16-clusteringress-proxy-service.yaml +++ b/install/helm/gloo/templates/16-clusteringress-proxy-service.yaml @@ -6,7 +6,6 @@ metadata: labels: app: gloo gloo: clusteringress-proxy - installationId: {{ include "gloo.installationId" . }} name: clusteringress-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/18-settings.yaml b/install/helm/gloo/templates/18-settings.yaml index b24853448da..c989a29af51 100644 --- a/install/helm/gloo/templates/18-settings.yaml +++ b/install/helm/gloo/templates/18-settings.yaml @@ -5,15 +5,11 @@ kind: Settings metadata: labels: app: gloo - installationId: {{ include "gloo.installationId" . }} name: default namespace: {{ .Release.Namespace }} - annotations: - "helm.sh/hook": pre-install - "helm.sh/hook-weight": "5" spec: gloo: - xdsBindAddr: 0.0.0.0:{{ .Values.gloo.deployment.xdsPort }} + xdsBindAddr: "0.0.0.0:{{ .Values.gloo.deployment.xdsPort }}" {{- if .Values.settings.invalidConfigPolicy }} invalidConfigPolicy: {{ toYaml .Values.settings.invalidConfigPolicy | indent 6}} diff --git a/install/helm/gloo/templates/2-gloo-service-account.yaml b/install/helm/gloo/templates/2-gloo-service-account.yaml index 684919caab3..f66219b9a81 100644 --- a/install/helm/gloo/templates/2-gloo-service-account.yaml +++ b/install/helm/gloo/templates/2-gloo-service-account.yaml @@ -4,9 +4,5 @@ metadata: labels: app: gloo gloo: gloo - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" name: gloo namespace: {{ $.Release.Namespace }} diff --git a/install/helm/gloo/templates/2-gloo-service.yaml b/install/helm/gloo/templates/2-gloo-service.yaml index 8403604b080..ae9933cd08e 100644 --- a/install/helm/gloo/templates/2-gloo-service.yaml +++ b/install/helm/gloo/templates/2-gloo-service.yaml @@ -4,7 +4,6 @@ metadata: labels: app: gloo gloo: gloo - installationId: {{ include "gloo.installationId" . }} name: gloo namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/2-gloo-usage-configmap.yaml b/install/helm/gloo/templates/2-gloo-usage-configmap.yaml index 15d939ac9e8..08fe38e72ed 100644 --- a/install/helm/gloo/templates/2-gloo-usage-configmap.yaml +++ b/install/helm/gloo/templates/2-gloo-usage-configmap.yaml @@ -7,5 +7,4 @@ metadata: labels: app: gloo gloo: gloo-usage - installationId: {{ include "gloo.installationId" . }} data: diff --git a/install/helm/gloo/templates/20-namespace-clusterrole-gateway.yaml b/install/helm/gloo/templates/20-namespace-clusterrole-gateway.yaml index e13ae309550..5addd1089e5 100644 --- a/install/helm/gloo/templates/20-namespace-clusterrole-gateway.yaml +++ b/install/helm/gloo/templates/20-namespace-clusterrole-gateway.yaml @@ -11,10 +11,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: [""] resources: ["pods", "services", "secrets", "endpoints", "configmaps", "namespaces"] @@ -30,10 +26,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: ["gloo.solo.io"] resources: ["upstreams"] @@ -50,10 +42,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: ["gloo.solo.io", "enterprise.gloo.solo.io"] resources: ["upstreams","upstreamgroups", "proxies", "authconfigs"] @@ -73,10 +61,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: ["gloo.solo.io"] resources: ["settings"] @@ -93,10 +77,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: ["gloo.solo.io"] resources: ["proxies"] @@ -112,10 +92,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: ["gateway.solo.io"] resources: ["virtualservices", "routetables"] @@ -126,31 +102,5 @@ rules: # update is needed for status updates, create for creating the default ones. verbs: ["get", "list", "watch", "create", "update"] -{{- if and .Values.gateway.validation.enabled .Values.gateway.certGenJob.enabled }} ---- -# this role requires access to cluster-scoped resources -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} - labels: - app: gloo - gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" -rules: -- apiGroups: [""] - resources: ["secrets"] - verbs: ["create", "get", "update"] -- apiGroups: ["admissionregistration.k8s.io"] - resources: ["validatingwebhookconfigurations"] - verbs: ["get", "update"] - -{{- end -}} - - - {{- end -}} {{- end -}} diff --git a/install/helm/gloo/templates/21-namespace-clusterrole-ingress.yaml b/install/helm/gloo/templates/21-namespace-clusterrole-ingress.yaml index 6177353364f..fa080a8ea6d 100644 --- a/install/helm/gloo/templates/21-namespace-clusterrole-ingress.yaml +++ b/install/helm/gloo/templates/21-namespace-clusterrole-ingress.yaml @@ -8,10 +8,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: [""] resources: ["pods", "services", "secrets", "endpoints", "configmaps"] diff --git a/install/helm/gloo/templates/22-namespace-clusterrole-knative.yaml b/install/helm/gloo/templates/22-namespace-clusterrole-knative.yaml index cf6e7afdbca..247acbbc033 100644 --- a/install/helm/gloo/templates/22-namespace-clusterrole-knative.yaml +++ b/install/helm/gloo/templates/22-namespace-clusterrole-knative.yaml @@ -8,10 +8,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "10" rules: - apiGroups: [""] resources: ["pods", "services", "secrets", "endpoints", "configmaps"] diff --git a/install/helm/gloo/templates/23-namespace-clusterrolebinding-gateway.yaml b/install/helm/gloo/templates/23-namespace-clusterrolebinding-gateway.yaml index f49736d6ccf..1608e5a5534 100644 --- a/install/helm/gloo/templates/23-namespace-clusterrolebinding-gateway.yaml +++ b/install/helm/gloo/templates/23-namespace-clusterrolebinding-gateway.yaml @@ -11,10 +11,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: gloo @@ -37,10 +33,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: discovery @@ -60,10 +52,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: gloo @@ -83,10 +71,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: gloo @@ -112,10 +96,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: gateway @@ -135,10 +115,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: gateway @@ -148,32 +124,5 @@ roleRef: name: gateway-resource-reader{{ include "gloo.rbacNameSuffix" . }} apiGroup: rbac.authorization.k8s.io - -{{- if and .Values.gateway.validation.enabled .Values.gateway.certGenJob.enabled }} ---- -# this role requires access to cluster-scoped resources -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} - labels: - app: gloo - gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" -subjects: -- kind: ServiceAccount - name: gateway-certgen - namespace: {{ .Release.Namespace }} -roleRef: - kind: ClusterRole - name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} - apiGroup: rbac.authorization.k8s.io - -{{- end -}} - - {{- end -}} {{- end -}} diff --git a/install/helm/gloo/templates/24-namespace-clusterrolebinding-ingress.yaml b/install/helm/gloo/templates/24-namespace-clusterrolebinding-ingress.yaml index e1f60bbc942..33818385c7a 100644 --- a/install/helm/gloo/templates/24-namespace-clusterrolebinding-ingress.yaml +++ b/install/helm/gloo/templates/24-namespace-clusterrolebinding-ingress.yaml @@ -8,10 +8,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: default diff --git a/install/helm/gloo/templates/25-namespace-clusterrolebinding-knative.yaml b/install/helm/gloo/templates/25-namespace-clusterrolebinding-knative.yaml index 0c6028b93eb..3bb01f114d8 100644 --- a/install/helm/gloo/templates/25-namespace-clusterrolebinding-knative.yaml +++ b/install/helm/gloo/templates/25-namespace-clusterrolebinding-knative.yaml @@ -8,10 +8,6 @@ metadata: labels: app: gloo gloo: rbac - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "15" subjects: - kind: ServiceAccount name: default diff --git a/install/helm/gloo/templates/26-knative-external-proxy-deployment.yaml b/install/helm/gloo/templates/26-knative-external-proxy-deployment.yaml index caa6ab02e63..bbbb41e4c2b 100644 --- a/install/helm/gloo/templates/26-knative-external-proxy-deployment.yaml +++ b/install/helm/gloo/templates/26-knative-external-proxy-deployment.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: knative-external-proxy - installationId: {{ include "gloo.installationId" . }} name: knative-external-proxy namespace: {{ .Release.Namespace }} spec: @@ -34,7 +33,7 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name - image: {{template "gloo.image" $image}} + image: {{ template "gloo.image" $image }} imagePullPolicy: {{ $image.pullPolicy }} name: knative-external-proxy {{- if .Values.settings.integrations.knative.proxy.resources }} diff --git a/install/helm/gloo/templates/27-knative-external-proxy-configmap.yaml b/install/helm/gloo/templates/27-knative-external-proxy-configmap.yaml index b264e6b1856..cc1851109c6 100644 --- a/install/helm/gloo/templates/27-knative-external-proxy-configmap.yaml +++ b/install/helm/gloo/templates/27-knative-external-proxy-configmap.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: knative-external-proxy - installationId: {{ include "gloo.installationId" . }} data: envoy.yaml: | node: diff --git a/install/helm/gloo/templates/28-knative-external-proxy-service.yaml b/install/helm/gloo/templates/28-knative-external-proxy-service.yaml index 275d5b2a42f..0bf8d8056fc 100644 --- a/install/helm/gloo/templates/28-knative-external-proxy-service.yaml +++ b/install/helm/gloo/templates/28-knative-external-proxy-service.yaml @@ -6,7 +6,6 @@ metadata: labels: app: gloo gloo: knative-external-proxy - installationId: {{ include "gloo.installationId" . }} name: knative-external-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/29-knative-internal-proxy-deployment.yaml b/install/helm/gloo/templates/29-knative-internal-proxy-deployment.yaml index abe8dd7ef88..820af0eef63 100644 --- a/install/helm/gloo/templates/29-knative-internal-proxy-deployment.yaml +++ b/install/helm/gloo/templates/29-knative-internal-proxy-deployment.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: knative-internal-proxy - installationId: {{ include "gloo.installationId" . }} name: knative-internal-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/3-discovery-deployment.yaml b/install/helm/gloo/templates/3-discovery-deployment.yaml index 43dd0f1287e..002a3c9376c 100644 --- a/install/helm/gloo/templates/3-discovery-deployment.yaml +++ b/install/helm/gloo/templates/3-discovery-deployment.yaml @@ -9,7 +9,6 @@ metadata: labels: app: gloo gloo: discovery - installationId: {{ include "gloo.installationId" . }} name: discovery namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/3-discovery-service-account.yaml b/install/helm/gloo/templates/3-discovery-service-account.yaml index c09cdfff1a9..6e4d70991fe 100644 --- a/install/helm/gloo/templates/3-discovery-service-account.yaml +++ b/install/helm/gloo/templates/3-discovery-service-account.yaml @@ -4,9 +4,5 @@ metadata: labels: app: gloo gloo: discovery - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" name: discovery namespace: {{ $.Release.Namespace }} \ No newline at end of file diff --git a/install/helm/gloo/templates/30-knative-internal-proxy-configmap.yaml b/install/helm/gloo/templates/30-knative-internal-proxy-configmap.yaml index 4ba762c206a..228640f3b29 100644 --- a/install/helm/gloo/templates/30-knative-internal-proxy-configmap.yaml +++ b/install/helm/gloo/templates/30-knative-internal-proxy-configmap.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: knative-internal-proxy - installationId: {{ include "gloo.installationId" . }} data: envoy.yaml: | node: diff --git a/install/helm/gloo/templates/31-knative-internal-proxy-service.yaml b/install/helm/gloo/templates/31-knative-internal-proxy-service.yaml index 7f5d1f0ad74..f8a75f974fa 100644 --- a/install/helm/gloo/templates/31-knative-internal-proxy-service.yaml +++ b/install/helm/gloo/templates/31-knative-internal-proxy-service.yaml @@ -6,7 +6,6 @@ metadata: labels: app: gloo gloo: knative-internal-proxy - installationId: {{ include "gloo.installationId" . }} name: knative-internal-proxy namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/5-gateway-deployment.yaml b/install/helm/gloo/templates/5-gateway-deployment.yaml index 9cefbaf1ba8..1671e9a3b18 100644 --- a/install/helm/gloo/templates/5-gateway-deployment.yaml +++ b/install/helm/gloo/templates/5-gateway-deployment.yaml @@ -9,7 +9,6 @@ metadata: labels: app: gloo gloo: gateway - installationId: {{ include "gloo.installationId" . }} name: gateway namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/5-gateway-service-account.yaml b/install/helm/gloo/templates/5-gateway-service-account.yaml index 54f11c42e14..55ecc9f608f 100644 --- a/install/helm/gloo/templates/5-gateway-service-account.yaml +++ b/install/helm/gloo/templates/5-gateway-service-account.yaml @@ -5,29 +5,6 @@ metadata: labels: app: gloo gloo: gateway - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" name: gateway namespace: {{ $.Release.Namespace }} - - -{{- if and .Values.gateway.validation.enabled .Values.gateway.certGenJob.enabled }} ---- - -apiVersion: v1 -kind: ServiceAccount -metadata: - labels: - app: gloo - gloo: gateway - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" - name: gateway-certgen - namespace: {{ $.Release.Namespace }} -{{ end }} - {{ end }} diff --git a/install/helm/gloo/templates/5-gateway-service.yaml b/install/helm/gloo/templates/5-gateway-service.yaml index ed5a3dea360..7694e13513e 100644 --- a/install/helm/gloo/templates/5-gateway-service.yaml +++ b/install/helm/gloo/templates/5-gateway-service.yaml @@ -6,7 +6,6 @@ metadata: discovery.solo.io/function_discovery: disabled app: gloo gloo: gateway - installationId: {{ include "gloo.installationId" . }} name: gateway namespace: {{ .Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/5-gateway-validation-webhook-configuration.yaml b/install/helm/gloo/templates/5-gateway-validation-webhook-configuration.yaml index a09ea14bea6..94685daa728 100644 --- a/install/helm/gloo/templates/5-gateway-validation-webhook-configuration.yaml +++ b/install/helm/gloo/templates/5-gateway-validation-webhook-configuration.yaml @@ -6,10 +6,9 @@ metadata: labels: app: gloo gloo: gateway - installationId: {{ include "gloo.installationId" . }} annotations: - "helm.sh/hook": pre-install - "helm.sh/hook-weight": "5" # should come before cert-gen job + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" # must be executed before cert-gen job webhooks: - name: gateway.{{ .Release.Namespace }}.svc # must be a domain with at least three segments separated by dots clientConfig: @@ -27,4 +26,37 @@ webhooks: failurePolicy: {{ .Values.gateway.validation.failurePolicy }} {{- end }} +--- + +# Resources created as hooks are not considered part of a release by Helm. This means that they +# will not be cleaned up when running `helm uninstall`. +# See https://helm.sh/docs/topics/charts_hooks/#hook-resources-are-not-managed-with-corresponding-releases). +# To be able to clean up the above hook resource, we redefine it as a `post-delete` hook with a `hook-delete-policy`. +apiVersion: admissionregistration.k8s.io/v1beta1 +kind: ValidatingWebhookConfiguration +metadata: + name: gloo-gateway-validation-webhook-{{ .Release.Namespace }} + labels: + app: gloo + gloo: gateway + annotations: + "helm.sh/hook": post-delete + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "solo.io/hook-cleanup": "true" # Used internally to mark "hook cleanup" resources +webhooks: +- name: gateway.{{ .Release.Namespace }}.svc + clientConfig: + service: + name: gateway + namespace: {{ .Release.Namespace }} + path: "/validation" + caBundle: "" + rules: + - operations: [ "CREATE", "UPDATE", "DELETE" ] + apiGroups: ["gateway.solo.io"] + apiVersions: ["v1"] + resources: ["*"] + {{- if .Values.gateway.validation.failurePolicy }} + failurePolicy: {{ .Values.gateway.validation.failurePolicy }} + {{- end }} {{- end }} diff --git a/install/helm/gloo/templates/6-access-logger-deployment.yaml b/install/helm/gloo/templates/6-access-logger-deployment.yaml index a4ab4dcca06..3b54f0f9f83 100644 --- a/install/helm/gloo/templates/6-access-logger-deployment.yaml +++ b/install/helm/gloo/templates/6-access-logger-deployment.yaml @@ -10,7 +10,6 @@ metadata: labels: app: gloo gloo: gateway-proxy-access-logger - installationId: {{ include "gloo.installationId" . }} name: gateway-proxy-access-logger namespace: {{ $.Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/6-access-logger-service.yaml b/install/helm/gloo/templates/6-access-logger-service.yaml index 3e4fd6f553f..2fbec0e40a4 100644 --- a/install/helm/gloo/templates/6-access-logger-service.yaml +++ b/install/helm/gloo/templates/6-access-logger-service.yaml @@ -6,7 +6,6 @@ metadata: labels: app: gloo gloo: gateway-proxy-access-logger - installationId: {{ include "gloo.installationId" . }} name: gateway-proxy-access-logger namespace: {{ $.Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/6.5-gateway-certgen-job.yaml b/install/helm/gloo/templates/6.5-gateway-certgen-job.yaml index 2465b109d1d..bb57bc5b3bd 100644 --- a/install/helm/gloo/templates/6.5-gateway-certgen-job.yaml +++ b/install/helm/gloo/templates/6.5-gateway-certgen-job.yaml @@ -1,6 +1,5 @@ -{{- if .Values.gateway.enabled }} -{{- if .Values.gateway.validation.enabled }} -{{- if .Values.gateway.certGenJob.enabled }} +{{- if and .Values.gateway.enabled .Values.gateway.validation.enabled .Values.gateway.certGenJob.enabled }} + {{- $image := .Values.gateway.certGenJob.image }} {{- if .Values.global }} {{- $image = merge .Values.gateway.certGenJob.image .Values.global.image }} @@ -11,12 +10,12 @@ metadata: labels: app: gloo gloo: gateway-certgen - installationId: {{ include "gloo.installationId" . }} name: gateway-certgen namespace: {{ .Release.Namespace }} annotations: - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "10" + "helm.sh/hook-delete-policy": hook-succeeded spec: template: metadata: @@ -44,6 +43,136 @@ spec: {{- if .Values.gateway.certGenJob.setTtlAfterFinished }} ttlSecondsAfterFinished: {{ .Values.gateway.certGenJob.ttlSecondsAfterFinished }} {{- end }} -{{- end }} -{{- end }} -{{- end }} + +--- + +{{- if .Values.global.glooRbac.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: gloo + gloo: gateway + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" # must be executed before cert-gen job + name: gateway-certgen + namespace: {{ $.Release.Namespace }} + +--- + +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} + labels: + app: gloo + gloo: rbac + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" # must be executed before cert-gen job +subjects: +- kind: ServiceAccount + name: gateway-certgen + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} + apiGroup: rbac.authorization.k8s.io + +--- + +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} + labels: + app: gloo + gloo: rbac + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" # must be executed before cert-gen job +rules: +- apiGroups: [""] + resources: ["secrets"] + verbs: ["create", "get", "update"] +- apiGroups: ["admissionregistration.k8s.io"] + resources: ["validatingwebhookconfigurations"] + verbs: ["get", "update"] + +--- + +# Resources created as hooks are not considered part of a release by Helm. This means that they +# will not be cleaned up when running `helm uninstall`. The ways to get around this are documented here: +# https://helm.sh/docs/topics/charts_hooks/#hook-resources-are-not-managed-with-corresponding-releases). +# These will not work for us though: we can't use `hook-delete-policy` since we have multiple hooks that depend +# on each other (RBAC resources needed by the job), and we cannot write a job to clean them up as this would result +# in a catch-22 (this second job would in turn need its own RBAC resources and who would clean up those?). +# +# To be able to clean up these hook resources, which are needed only temporarily during the pre-install(/upgrade) phase, +# we redefine them as `post-install(upgrade)` hooks with a `hook-delete-policy`. This way Helm will reapply them and +# immediately delete them after the installation completes. Note that we have to explicitly define a `before-hook-creation` +# policy as well, to avoid failing on existing resources (`before-hook-creation` is the default `hook-delete-policy` +# if none is specified`). +# +# The following resources implement this workaround. +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: gloo + gloo: gateway + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "solo.io/hook-cleanup": "true" # Used internally to mark "hook cleanup" resources + name: gateway-certgen + namespace: {{ $.Release.Namespace }} + +--- + +# The following resources implement the hook cleanup workaround. +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} + labels: + app: gloo + gloo: rbac + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "solo.io/hook-cleanup": "true" # Used internally to mark "hook cleanup" resources +subjects: +- kind: ServiceAccount + name: gateway-certgen + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} + apiGroup: rbac.authorization.k8s.io + +--- + +# The following resources implement the hook cleanup workaround. +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: gloo-gateway-secret-create-vwc-update{{ include "gloo.rbacNameSuffix" . }} + labels: + app: gloo + gloo: rbac + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "solo.io/hook-cleanup": "true" # Used internally to mark "hook cleanup" resources +rules: +- apiGroups: [""] + resources: ["secrets"] + verbs: ["create", "get", "update"] +- apiGroups: ["admissionregistration.k8s.io"] + resources: ["validatingwebhookconfigurations"] + verbs: ["get", "update"] + +{{- end }} # .Values.global.glooRbac.create +{{- end }} \ No newline at end of file diff --git a/install/helm/gloo/templates/7-gateway-proxy-deployment.yaml b/install/helm/gloo/templates/7-gateway-proxy-deployment.yaml index 949009ddb3d..bde6df8835c 100644 --- a/install/helm/gloo/templates/7-gateway-proxy-deployment.yaml +++ b/install/helm/gloo/templates/7-gateway-proxy-deployment.yaml @@ -21,7 +21,6 @@ metadata: app: gloo gloo: gateway-proxy gateway-proxy-id: {{ $name | kebabcase }} - installationId: {{ include "gloo.installationId" $ }} name: {{ $name | kebabcase }} namespace: {{ $.Release.Namespace }} spec: diff --git a/install/helm/gloo/templates/8-default-gateways.yaml b/install/helm/gloo/templates/8-default-gateways.yaml index 46f8cd7a657..d4a439d3761 100644 --- a/install/helm/gloo/templates/8-default-gateways.yaml +++ b/install/helm/gloo/templates/8-default-gateways.yaml @@ -11,10 +11,10 @@ metadata: namespace: {{ $.Release.Namespace }} labels: app: gloo - installationId: {{ include "gloo.installationId" $ }} + # We need this because the gateway controller will try to write default gateway objects + # and if it is able to do so before this resource gets applied, installation will fail. annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" + "helm.sh/hook": pre-install spec: bindAddress: "::" bindPort: {{ $spec.podTemplate.httpPort }} @@ -38,10 +38,10 @@ metadata: namespace: {{ $.Release.Namespace }} labels: app: gloo - installationId: {{ include "gloo.installationId" $ }} + # We need this because the gateway controller will try to write default gateway objects + # and if it is able to do so before this resource gets applied, installation will fail. annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" + "helm.sh/hook": pre-install spec: bindAddress: "::" bindPort: {{ $spec.podTemplate.httpsPort }} diff --git a/install/helm/gloo/templates/8-gateway-proxy-service-account.yaml b/install/helm/gloo/templates/8-gateway-proxy-service-account.yaml index 264f2d88872..7e1caed545f 100644 --- a/install/helm/gloo/templates/8-gateway-proxy-service-account.yaml +++ b/install/helm/gloo/templates/8-gateway-proxy-service-account.yaml @@ -5,10 +5,6 @@ metadata: labels: app: gloo gloo: gateway-proxy - installationId: {{ include "gloo.installationId" . }} - annotations: - "helm.sh/hook": "pre-install" - "helm.sh/hook-weight": "5" name: gateway-proxy namespace: {{ $.Release.Namespace }} {{- if .Values.gateway.proxyServiceAccount.disableAutomount }} diff --git a/install/helm/gloo/templates/8-gateway-proxy-service.yaml b/install/helm/gloo/templates/8-gateway-proxy-service.yaml index 6f0e8e20532..b917ab60463 100644 --- a/install/helm/gloo/templates/8-gateway-proxy-service.yaml +++ b/install/helm/gloo/templates/8-gateway-proxy-service.yaml @@ -8,7 +8,6 @@ metadata: app: gloo gloo: gateway-proxy gateway-proxy-id: {{ $name | kebabcase }} - installationId: {{ include "gloo.installationId" $ }} name: {{ $name | kebabcase }} namespace: {{ $.Release.Namespace }} {{- if $spec.service.extraAnnotations }} diff --git a/install/helm/gloo/templates/9-gateway-proxy-configmap.yaml b/install/helm/gloo/templates/9-gateway-proxy-configmap.yaml index 27ec08f4be4..e7038d30954 100644 --- a/install/helm/gloo/templates/9-gateway-proxy-configmap.yaml +++ b/install/helm/gloo/templates/9-gateway-proxy-configmap.yaml @@ -11,7 +11,6 @@ metadata: app: gloo gloo: gateway-proxy gateway-proxy-id: {{ $name | kebabcase }} - installationId: {{ include "gloo.installationId" $ }} data: {{ if (empty $spec.configMap.data) }} envoy.yaml: | diff --git a/install/helm/gloo/templates/_helpers.tpl b/install/helm/gloo/templates/_helpers.tpl index ef7800981a1..eb68ef66eaa 100644 --- a/install/helm/gloo/templates/_helpers.tpl +++ b/install/helm/gloo/templates/_helpers.tpl @@ -26,12 +26,3 @@ Expand the name of a container image {{- define "gloo.image" -}} {{ .registry }}/{{ .repository }}:{{ .tag }} {{- end -}} - -{{/* This value makes its way into k8s labels, so if the implementation changes, - make sure it's compatible with label values */}} -{{- define "gloo.installationId" -}} -{{- if not .Values.global.glooInstallationId -}} -{{- $_ := set .Values.global "glooInstallationId" (randAlphaNum 20) -}} -{{- end -}} -{{ .Values.global.glooInstallationId }} -{{- end -}} diff --git a/install/helm/gloo/values-ingress-template.yaml b/install/helm/gloo/values-ingress-template.yaml deleted file mode 100644 index eafd942b1f1..00000000000 --- a/install/helm/gloo/values-ingress-template.yaml +++ /dev/null @@ -1,40 +0,0 @@ -namespace: - create: false -crds: - create: true -k8s: - clusterName: cluster.local - -ingress: - enabled: true - deployment: - image: - repository: ingress - replicas: 1 - - -ingressProxy: - deployment: - image: - repository: gloo-envoy-wrapper - httpPort: 80 - httpsPort: 443 - replicas: 1 - stats: true - configMap: - data: - tracing: - -gateway: - enabled: false - -accessLogger: - enabled: false - -global: - image: - registry: quay.io/solo-io - pullPolicy: IfNotPresent - glooRbac: - create: true - diff --git a/install/helm/gloo/values-knative-template.yaml b/install/helm/gloo/values-knative-template.yaml deleted file mode 100644 index bfa51e6ba1e..00000000000 --- a/install/helm/gloo/values-knative-template.yaml +++ /dev/null @@ -1,45 +0,0 @@ -namespace: - create: false -crds: - create: true -k8s: - clusterName: cluster.local - -settings: - create: true - linkerd: false - integrations: - knative: - enabled: true - version: "0.8.0" - proxy: - image: - repository: gloo-envoy-wrapper - httpPort: 80 - httpsPort: 443 - replicas: 1 - stats: true - -gateway: - enabled: false - -accessLogger: - enabled: false - -discovery: - fdsMode: WHITELIST - -ingress: - # ingress proxy is disabled, but we still need the controller for knative - enabled: false - deployment: - image: - repository: ingress - replicas: 1 - -global: - image: - registry: quay.io/solo-io - pullPolicy: IfNotPresent - glooRbac: - create: true \ No newline at end of file diff --git a/install/helm/gloo/values-gateway-template.yaml b/install/helm/gloo/values-template.yaml similarity index 82% rename from install/helm/gloo/values-gateway-template.yaml rename to install/helm/gloo/values-template.yaml index db499a5e65d..80183a6dc70 100644 --- a/install/helm/gloo/values-gateway-template.yaml +++ b/install/helm/gloo/values-template.yaml @@ -1,10 +1,7 @@ namespace: create: false -crds: - create: true k8s: clusterName: cluster.local - settings: # if this is set to false, default settings will be created by pods upon boot create: true @@ -16,9 +13,16 @@ settings: integrations: knative: enabled: false + version: "0.10.0" + proxy: + image: + repository: gloo-envoy-wrapper + httpPort: 80 + httpsPort: 443 + replicas: 1 + stats: true # namespaces that Gloo should watch. this includes watches set for pods, services, as well as CRD configuration objects watchNamespaces: [] - gloo: deployment: image: @@ -28,16 +32,15 @@ gloo: replicas: 1 stats: true runAsUser: 10101 - discovery: enabled: true + fdsMode: WHITELIST deployment: image: repository: discovery replicas: 1 stats: true runAsUser: 10101 - gateway: enabled: true readGatewaysFromAllNamespaces: false @@ -60,14 +63,13 @@ gateway: setTtlAfterFinished: true ttlSecondsAfterFinished: 60 proxyServiceAccount: {} - gatewayProxies: gatewayProxy: gatewaySettings: {} stats: true kind: - deployment: - replicas: 1 + deployment: + replicas: 1 podTemplate: probes: false image: @@ -86,7 +88,6 @@ gatewayProxies: tracing: configMap: data: - accessLogger: enabled: false port: 8083 @@ -94,10 +95,23 @@ accessLogger: image: repository: access-logger replicas: 1 - ingress: enabled: false - + deployment: + image: + repository: ingress + replicas: 1 +ingressProxy: + deployment: + image: + repository: gloo-envoy-wrapper + httpPort: 80 + httpsPort: 443 + replicas: 1 + stats: true + configMap: + data: + tracing: global: image: registry: quay.io/solo-io diff --git a/install/test/helm_suite_test.go b/install/test/helm_suite_test.go index c7284596d30..a9eb31ec18d 100644 --- a/install/test/helm_suite_test.go +++ b/install/test/helm_suite_test.go @@ -4,9 +4,21 @@ import ( "io/ioutil" "os" "os/exec" - "sync" + "path" "testing" + "github.com/solo-io/gloo/pkg/cliutil/helm" + + "github.com/ghodss/yaml" + "github.com/solo-io/gloo/projects/gloo/pkg/defaults" + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/chart/loader" + "helm.sh/helm/v3/pkg/cli" + "helm.sh/helm/v3/pkg/strvals" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + k8syamlutil "sigs.k8s.io/yaml" + "github.com/solo-io/go-utils/testutils" v1 "k8s.io/api/core/v1" @@ -16,7 +28,6 @@ import ( ) func TestHelm(t *testing.T) { - version = os.Getenv("TAGGED_VERSION") if version == "" { version = "dev" @@ -31,16 +42,20 @@ func TestHelm(t *testing.T) { RunSpecs(t, "Helm Suite") } +var _ = BeforeSuite(func() { + // generate the values.yaml and Chart.yaml files + MustMake(".", "-C", "../../", "clean") + MustMake(".", "-C", "../../", "prepare-helm") +}) + const ( namespace = "gloo-system" + chartDir = "../helm/gloo" ) var ( - version string - // use a mutex to prevent these tests from running in parallel - makefileSerializer sync.Mutex - pullPolicy v1.PullPolicy - manifests = map[string]TestManifest{} + version string + pullPolicy v1.PullPolicy ) func MustMake(dir string, args ...string) { @@ -54,22 +69,152 @@ func MustMake(dir string, args ...string) { ExpectWithOffset(1, err).NotTo(HaveOccurred()) } -func renderManifest(helmFlags string) TestManifest { - makefileSerializer.Lock() - defer makefileSerializer.Unlock() +type helmValues struct { + valuesFile string + valuesArgs []string // each entry should look like `path.to.helm.field=value` +} + +// returns a TestManifest containing all resources NOT marked by our hook-cleanup annotation +func renderManifest(namespace string, values helmValues) (TestManifest, error) { + chartRequested, err := loader.Load(chartDir) + if err != nil { + return nil, err + } + + helmValues, err := buildHelmValues(values) + if err != nil { + return nil, err + } + + client, err := buildRenderer(namespace) + if err != nil { + return nil, err + } - if tm, ok := manifests[helmFlags]; ok { - return tm + rel, err := client.Run(chartRequested, helmValues) + if err != nil { + return nil, err } + // the test manifest utils can only read from a file, ugh f, err := ioutil.TempFile("", "*.yaml") - ExpectWithOffset(2, err).NotTo(HaveOccurred()) - _ = f.Close() - manifestYaml := f.Name() - defer os.Remove(manifestYaml) - - MustMake(".", "-C", "../..", "install/gloo-gateway.yaml", "HELMFLAGS="+helmFlags, "OUTPUT_YAML="+manifestYaml) - tm := NewTestManifest(manifestYaml) - manifests[helmFlags] = tm - return tm + Expect(err).NotTo(HaveOccurred(), "Should be able to write a temp file for the helm unit test manifest") + defer func() { _ = os.Remove(f.Name()) }() + + _, err = f.Write([]byte(rel.Manifest)) + Expect(err).NotTo(HaveOccurred(), "Should be able to write the release manifest to the temp file for the helm unit tests") + + // also need to add in the hooks, which are not included in the release manifest + // be sure to skip the resources that we duplicate because of Helm hook weirdness (see the comment on install.GetNonCleanupHooks) + nonCleanupHooks, err := helm.GetNonCleanupHooks(rel.Hooks) + Expect(err).NotTo(HaveOccurred(), "Should be able to get the non-cleanup hooks in the helm unit test setup") + + for _, hook := range nonCleanupHooks { + manifest := hook.Manifest + _, err = f.Write([]byte("\n---\n" + manifest)) + Expect(err).NotTo(HaveOccurred(), "Should be able to write the hook manifest to the temp file for the helm unit tests") + } + + return NewTestManifest(f.Name()), nil +} + +// each entry in valuesArgs should look like `path.to.helm.field=value` +func buildHelmValues(values helmValues) (map[string]interface{}, error) { + // read the chart's base values file first + finalValues, err := readValuesFile(path.Join(chartDir, "values.yaml")) + if err != nil { + return nil, err + } + + for _, v := range values.valuesArgs { + err := strvals.ParseInto(v, finalValues) + if err != nil { + return nil, err + } + } + + if values.valuesFile != "" { + // these lines ripped out of Helm internals + // https://github.com/helm/helm/blob/release-3.0/pkg/cli/values/options.go + mapFromFile, err := readValuesFile(values.valuesFile) + if err != nil { + return nil, err + } + + // Merge with the previous map + finalValues = mergeMaps(finalValues, mapFromFile) + } + + return finalValues, nil +} + +func readValuesFile(filePath string) (map[string]interface{}, error) { + mapFromFile := map[string]interface{}{} + + bytes, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, err + } + + // NOTE: This is not the default golang yaml.Unmarshal, because that implementation + // does not unmarshal into a map[string]interface{}; it unmarshals the file into a map[interface{}]interface{} + // https://github.com/go-yaml/yaml/issues/139 + if err := k8syamlutil.Unmarshal(bytes, &mapFromFile); err != nil { + return nil, err + } + + return mapFromFile, nil +} + +func buildRenderer(namespace string) (*action.Install, error) { + settings := cli.New() + actionConfig := new(action.Configuration) + noOpDebugLog := func(format string, v ...interface{}) {} + + if err := actionConfig.Init( + settings.RESTClientGetter(), + defaults.GlooSystem, + os.Getenv("HELM_DRIVER"), + noOpDebugLog, + ); err != nil { + return nil, err + } + + renderer := action.NewInstall(actionConfig) + renderer.DryRun = true + renderer.Namespace = namespace + renderer.ReleaseName = "gloo" + renderer.Namespace = "gloo-system" + renderer.ClientOnly = true + + return renderer, nil +} + +// stolen from Helm internals +// https://github.com/helm/helm/blob/release-3.0/pkg/cli/values/options.go#L88 +func mergeMaps(a, b map[string]interface{}) map[string]interface{} { + out := make(map[string]interface{}, len(a)) + for k, v := range a { + out[k] = v + } + for k, v := range b { + if v, ok := v.(map[string]interface{}); ok { + if bv, ok := out[k]; ok { + if bv, ok := bv.(map[string]interface{}); ok { + out[k] = mergeMaps(bv, v) + continue + } + } + } + out[k] = v + } + return out +} + +func makeUnstructured(yam string) *unstructured.Unstructured { + jsn, err := yaml.YAMLToJSON([]byte(yam)) + Expect(err).NotTo(HaveOccurred()) + runtimeObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, jsn) + Expect(err).NotTo(HaveOccurred()) + return runtimeObj.(*unstructured.Unstructured) } diff --git a/install/test/helm_test.go b/install/test/helm_test.go index 09b79fbd1d7..9bd35dda52a 100644 --- a/install/test/helm_test.go +++ b/install/test/helm_test.go @@ -4,12 +4,10 @@ import ( "encoding/json" "fmt" + "github.com/gogo/protobuf/proto" "github.com/solo-io/reporting-client/pkg/client" + "k8s.io/utils/pointer" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/yaml" - - "github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/types" gwv1 "github.com/solo-io/gloo/projects/gateway/pkg/api/v1" "github.com/solo-io/gloo/projects/gateway/pkg/defaults" @@ -19,7 +17,6 @@ import ( "github.com/solo-io/solo-kit/pkg/utils/kubeutils" skprotoutils "github.com/solo-io/solo-kit/pkg/utils/protoutils" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/utils/pointer" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -74,14 +71,11 @@ var _ = Describe("Helm Test", func() { {Name: "grpc-xds", ContainerPort: 9977, Protocol: "TCP"}, {Name: "grpc-validation", ContainerPort: 9988, Protocol: "TCP"}, } - helmTestInstallId = "helm-unit-test-install-id" ) Describe("gateway proxy extra annotations and crds", func() { var ( - globalLabels = map[string]string{ - "installationId": helmTestInstallId, - } + globalLabels = map[string]string{} setGlobalLabels = func(testLabels map[string]string) { for k, v := range globalLabels { testLabels[k] = v @@ -92,18 +86,21 @@ var _ = Describe("Helm Test", func() { statsAnnotations map[string]string ) - // adds the install ID into the provided helm flags- no need to provide it yourself - prepareMakefile := func(helmFlags string) { - testManifest = renderManifest(helmFlags + " --set global.glooInstallationId=" + helmTestInstallId) + // each entry in valuesArgs should look like `path.to.helm.field=value` + prepareMakefile := func(namespace string, values helmValues) { + tm, err := renderManifest(namespace, values) + Expect(err).NotTo(HaveOccurred(), "Failed to render manifest") + testManifest = tm } // helper for passing a values file prepareMakefileFromValuesFile := func(valuesFile string) { - helmFlags := "--namespace " + namespace + - " --set namespace.create=true" + - " --set gatewayProxies.gatewayProxy.service.extraAnnotations.test=test" + - " --values " + valuesFile - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesFile: valuesFile, + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.service.extraAnnotations.test=test", + }, + }) } BeforeEach(func() { statsAnnotations = map[string]string{ @@ -113,58 +110,6 @@ var _ = Describe("Helm Test", func() { } }) - Context("installation", func() { - installIdLabel := "installationId" - - It("attaches a unique installation ID label to all top-level kubernetes resources if install ID is omitted", func() { - testManifest = renderManifest("--namespace " + namespace) - - Expect(testManifest.NumResources()).NotTo(BeZero(), "Test manifest should have a nonzero number of resources") - var uniqueInstallationId string - testManifest.ExpectAll(func(resource *unstructured.Unstructured) { - installationId, ok := resource.GetLabels()[installIdLabel] - Expect(ok).To(BeTrue(), fmt.Sprintf("The installation ID key should be present, but is not present on %s %s in namespace %s", - resource.GetKind(), - resource.GetName(), - resource.GetNamespace())) - - if uniqueInstallationId == "" { - uniqueInstallationId = installationId - } - - Expect(installationId).To(Equal(uniqueInstallationId), - fmt.Sprintf("Should not have generated several installation IDs, but found %s on %s %s in namespace %s", - installationId, - resource.GetKind(), - resource.GetNamespace(), - resource.GetNamespace())) - }) - - Expect(uniqueInstallationId).NotTo(Equal(helmTestInstallId), "Make sure we didn't accidentally set our install ID to the helm test ID") - }) - - It("can assign a custom installation ID", func() { - installId := "custom-install-id" - testManifest = renderManifest("--namespace " + namespace + " --set global.glooInstallationId=" + installId) - - Expect(testManifest.NumResources()).NotTo(BeZero()) - testManifest.ExpectAll(func(resource *unstructured.Unstructured) { - installationId, ok := resource.GetLabels()[installIdLabel] - Expect(ok).To(BeTrue(), fmt.Sprintf("The installation ID key should be present, but is not present on %s %s in namespace %s", - resource.GetKind(), - resource.GetName(), - resource.GetNamespace())) - - Expect(installationId).To(Equal(installId), - fmt.Sprintf("Should not have generated several installation IDs, but found %s on %s %s in namespace %s", - installationId, - resource.GetKind(), - resource.GetNamespace(), - resource.GetNamespace())) - }) - }) - }) - Context("gateway", func() { var labels map[string]string BeforeEach(func() { @@ -181,8 +126,9 @@ var _ = Describe("Helm Test", func() { }) It("has a namespace", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.service.extraAnnotations.test=test" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.service.extraAnnotations.test=test"}, + }) rb := ResourceBuilder{ Namespace: namespace, Name: defaults.GatewayProxyName, @@ -222,7 +168,7 @@ var _ = Describe("Helm Test", func() { }) It("can create an access logging deployment/service", func() { - prepareMakefileFromValuesFile("install/test/val_access_logger.yaml") + prepareMakefileFromValuesFile("val_access_logger.yaml") container := GetQuayContainerSpec("access-logger", version, GetPodNamespaceEnvVar(), GetPodNameEnvVar(), v1.EnvVar{ Name: "SERVICE_NAME", @@ -285,7 +231,7 @@ var _ = Describe("Helm Test", func() { }) It("has a proxy with access logging cluster", func() { - prepareMakefileFromValuesFile("install/test/val_access_logger.yaml") + prepareMakefileFromValuesFile("val_access_logger.yaml") proxySpec := make(map[string]string) labels = map[string]string{ "gloo": "gateway-proxy", @@ -312,7 +258,7 @@ var _ = Describe("Helm Test", func() { ) It("renders with http/https gateways by default", func() { - prepareMakefile("--namespace " + namespace) + prepareMakefile(namespace, helmValues{}) gatewayUns := testManifest.ExpectCustomResource("Gateway", namespace, defaults.GatewayProxyName) var gateway1 gwv1.Gateway ConvertKubeResource(gatewayUns, &gateway1) @@ -331,7 +277,9 @@ var _ = Describe("Helm Test", func() { }) It("can disable rendering http/https gateways", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.gatewaySettings.disableGeneratedGateways=true") + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.gatewaySettings.disableGeneratedGateways=true"}, + }) testManifest.ExpectUnstructured("Gateway", namespace, defaults.GatewayProxyName).To(BeNil()) testManifest.ExpectUnstructured("Gateway", namespace, defaults.GatewayProxyName+"-ssl").To(BeNil()) }) @@ -344,7 +292,7 @@ var _ = Describe("Helm Test", func() { Namespace: "one", }, } - prepareMakefileFromValuesFile("install/test/val_custom_gateways.yaml") + prepareMakefileFromValuesFile("val_custom_gateways.yaml") for _, name := range []string{newGatewayProxyName, defaults.GatewayProxyName} { name := name gatewayUns := testManifest.ExpectCustomResource("Gateway", namespace, name) @@ -408,34 +356,46 @@ var _ = Describe("Helm Test", func() { It("sets extra annotations", func() { gatewayProxyService.ObjectMeta.Annotations = map[string]string{"foo": "bar", "bar": "baz"} - prepareMakefile("--namespace " + namespace + - " --set gatewayProxies.gatewayProxy.service.extraAnnotations.foo=bar" + - " --set gatewayProxies.gatewayProxy.service.extraAnnotations.bar=baz") + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.service.extraAnnotations.foo=bar", + "gatewayProxies.gatewayProxy.service.extraAnnotations.bar=baz", + }, + }) testManifest.ExpectService(gatewayProxyService) }) It("sets external traffic policy", func() { gatewayProxyService.Spec.ExternalTrafficPolicy = v1.ServiceExternalTrafficPolicyTypeLocal - prepareMakefile("--namespace " + namespace + - " --set gatewayProxies.gatewayProxy.service.externalTrafficPolicy=Local") + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.service.externalTrafficPolicy=" + string(v1.ServiceExternalTrafficPolicyTypeLocal), + }, + }) testManifest.ExpectService(gatewayProxyService) }) It("sets cluster IP", func() { gatewayProxyService.Spec.Type = v1.ServiceTypeClusterIP gatewayProxyService.Spec.ClusterIP = "test-ip" - prepareMakefile("--namespace " + namespace + - " --set gatewayProxies.gatewayProxy.service.type=ClusterIP" + - " --set gatewayProxies.gatewayProxy.service.clusterIP=test-ip") + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.service.type=ClusterIP", + "gatewayProxies.gatewayProxy.service.clusterIP=test-ip", + }, + }) testManifest.ExpectService(gatewayProxyService) }) It("sets load balancer IP", func() { gatewayProxyService.Spec.Type = v1.ServiceTypeLoadBalancer gatewayProxyService.Spec.LoadBalancerIP = "test-lb-ip" - prepareMakefile("--namespace " + namespace + - " --set gatewayProxies.gatewayProxy.service.type=LoadBalancer" + - " --set gatewayProxies.gatewayProxy.service.loadBalancerIP=test-lb-ip") + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.service.type=LoadBalancer", + "gatewayProxies.gatewayProxy.service.loadBalancerIP=test-lb-ip", + }, + }) testManifest.ExpectService(gatewayProxyService) }) }) @@ -544,28 +504,33 @@ var _ = Describe("Helm Test", func() { }) It("creates a daemonset", func() { - helmFlags := "--namespace " + namespace + " --set gatewayProxies.gatewayProxy.kind.deployment=null --set gatewayProxies.gatewayProxy.kind.daemonSet.hostPort=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.kind.deployment=null", + "gatewayProxies.gatewayProxy.kind.daemonSet.hostPort=true", + }, + }) testManifest.Expect("DaemonSet", gatewayProxyDeployment.Namespace, gatewayProxyDeployment.Name).To(BeEquivalentTo(daemonSet)) }) }) It("creates a deployment", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectDeploymentAppsV1(gatewayProxyDeployment) }) It("disables net bind", func() { - helmFlags := "--namespace " + namespace + " --set gatewayProxies.gatewayProxy.podTemplate.disableNetBind=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.podTemplate.disableNetBind=true"}, + }) gatewayProxyDeployment.Spec.Template.Spec.Containers[0].SecurityContext.Capabilities.Add = nil testManifest.ExpectDeploymentAppsV1(gatewayProxyDeployment) }) It("unprivelged user", func() { - helmFlags := "--namespace " + namespace + " --set gatewayProxies.gatewayProxy.podTemplate.runUnprivileged=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.podTemplate.runUnprivileged=true"}, + }) truez := true uid := int64(10101) gatewayProxyDeployment.Spec.Template.Spec.Containers[0].SecurityContext.RunAsNonRoot = &truez @@ -574,8 +539,9 @@ var _ = Describe("Helm Test", func() { }) It("enables anti affinity ", func() { - helmFlags := "--namespace " + namespace + " --set gatewayProxies.gatewayProxy.antiAffinity=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.antiAffinity=true"}, + }) gatewayProxyDeployment.Spec.Template.Spec.Affinity = &v1.Affinity{ PodAntiAffinity: &v1.PodAntiAffinity{ PreferredDuringSchedulingIgnoredDuringExecution: []v1.WeightedPodAffinityTerm{{ @@ -593,8 +559,6 @@ var _ = Describe("Helm Test", func() { }) It("enables probes", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.podTemplate.probes=true" - gatewayProxyDeployment.Spec.Template.Spec.Containers[0].ReadinessProbe = &v1.Probe{ Handler: v1.Handler{ Exec: &v1.ExecAction{ @@ -619,13 +583,21 @@ var _ = Describe("Helm Test", func() { PeriodSeconds: 10, FailureThreshold: 10, } - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.podTemplate.probes=true"}, + }) testManifest.ExpectDeploymentAppsV1(gatewayProxyDeployment) }) It("has limits", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.podTemplate.resources.limits.memory=2 --set gatewayProxies.gatewayProxy.podTemplate.resources.limits.cpu=3 --set gatewayProxies.gatewayProxy.podTemplate.resources.requests.memory=4 --set gatewayProxies.gatewayProxy.podTemplate.resources.requests.cpu=5" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.podTemplate.resources.limits.memory=2", + "gatewayProxies.gatewayProxy.podTemplate.resources.limits.cpu=3", + "gatewayProxies.gatewayProxy.podTemplate.resources.requests.memory=4", + "gatewayProxies.gatewayProxy.podTemplate.resources.requests.cpu=5", + }, + }) // Add the limits we are testing: gatewayProxyDeployment.Spec.Template.Spec.Containers[0].Resources = v1.ResourceRequirements{ @@ -644,8 +616,12 @@ var _ = Describe("Helm Test", func() { It("can overwrite the container image information", func() { gatewayProxyDeployment.Spec.Template.Spec.Containers[0].Image = fmt.Sprintf("gcr.io/solo-public/gloo-envoy-wrapper:%s", version) gatewayProxyDeployment.Spec.Template.Spec.Containers[0].ImagePullPolicy = "Always" - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.podTemplate.image.pullPolicy=Always --set gatewayProxies.gatewayProxy.podTemplate.image.registry=gcr.io/solo-public" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gatewayProxies.gatewayProxy.podTemplate.image.pullPolicy=Always", + "gatewayProxies.gatewayProxy.podTemplate.image.registry=gcr.io/solo-public", + }, + }) testManifest.ExpectDeploymentAppsV1(gatewayProxyDeployment) }) @@ -656,8 +632,9 @@ var _ = Describe("Helm Test", func() { gatewayProxyDeployment.Spec.Template.Annotations["readconfig-config_dump"] = "/config_dump" gatewayProxyDeployment.Spec.Template.Annotations["readconfig-port"] = "8082" - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.readConfig=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.readConfig=true"}, + }) testManifest.ExpectDeploymentAppsV1(gatewayProxyDeployment) }) @@ -686,8 +663,9 @@ var _ = Describe("Helm Test", func() { }, }) - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.extraContainersHelper=gloo.testcontainer" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.extraContainersHelper=gloo.testcontainer"}, + }) testManifest.ExpectDeploymentAppsV1(gatewayProxyDeployment) }) }) @@ -698,24 +676,23 @@ var _ = Describe("Helm Test", func() { apiVersion: v1 kind: Service metadata: - labels: - discovery.solo.io/function_discovery: disabled - app: gloo - gloo: gateway - installationId: ` + helmTestInstallId + ` - name: gateway - namespace: ` + namespace + ` + labels: + discovery.solo.io/function_discovery: disabled + app: gloo + gloo: gateway + name: gateway + namespace: ` + namespace + ` spec: - ports: - - name: https - port: 443 - protocol: TCP - targetPort: 8443 - selector: - gloo: gateway + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 8443 + selector: + gloo: gateway `) - prepareMakefile("--namespace " + namespace) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectUnstructured(gwService.GetKind(), gwService.GetNamespace(), gwService.GetName()).To(BeEquivalentTo(gwService)) }) @@ -725,35 +702,33 @@ spec: apiVersion: gloo.solo.io/v1 kind: Settings metadata: - annotations: - helm.sh/hook: pre-install - helm.sh/hook-weight: "5" - labels: - app: gloo - installationId: ` + helmTestInstallId + ` - name: default - namespace: ` + namespace + ` + labels: + app: gloo + name: default + namespace: ` + namespace + ` spec: - gateway: - readGatewaysFromAllNamespaces: false - validation: - alwaysAccept: true - proxyValidationServerAddr: gloo:9988 - gloo: - xdsBindAddr: 0.0.0.0:9977 - invalidConfigPolicy: - invalidRouteResponseBody: Gloo Gateway has invalid configuration. Administrators should run - ` + "`" + `glooctl check` + "`" + ` to find and fix config errors. - invalidRouteResponseCode: 404 - - kubernetesArtifactSource: {} - kubernetesConfigSource: {} - kubernetesSecretSource: {} - refreshRate: 60s - discoveryNamespace: ` + namespace + ` + discovery: + fdsMode: WHITELIST + gateway: + readGatewaysFromAllNamespaces: false + validation: + alwaysAccept: true + proxyValidationServerAddr: gloo:9988 + gloo: + xdsBindAddr: 0.0.0.0:9977 + invalidConfigPolicy: + invalidRouteResponseBody: Gloo Gateway has invalid configuration. Administrators should run + ` + "`" + `glooctl check` + "`" + ` to find and fix config errors. + invalidRouteResponseCode: 404 + + kubernetesArtifactSource: {} + kubernetesConfigSource: {} + kubernetesSecretSource: {} + refreshRate: 60s + discoveryNamespace: ` + namespace + ` `) - prepareMakefile("--namespace " + namespace) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectUnstructured(settings.GetKind(), settings.GetNamespace(), settings.GetName()).To(BeEquivalentTo(settings)) }) @@ -767,27 +742,26 @@ metadata: labels: app: gloo gloo: gateway - installationId: ` + helmTestInstallId + ` annotations: - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "5" # should come before cert-gen job webhooks: - - name: gateway.` + namespace + `.svc # must be a domain with at least three segments separated by dots - clientConfig: - service: - name: gateway - namespace: ` + namespace + ` - path: "/validation" - caBundle: "" # update manually or use certgen job - rules: - - operations: [ "CREATE", "UPDATE", "DELETE" ] - apiGroups: ["gateway.solo.io"] - apiVersions: ["v1"] - resources: ["*"] - failurePolicy: Ignore + - name: gateway.` + namespace + `.svc # must be a domain with at least three segments separated by dots + clientConfig: + service: + name: gateway + namespace: ` + namespace + ` + path: "/validation" + caBundle: "" # update manually or use certgen job + rules: + - operations: [ "CREATE", "UPDATE", "DELETE" ] + apiGroups: ["gateway.solo.io"] + apiVersions: ["v1"] + resources: ["*"] + failurePolicy: Ignore `) - prepareMakefile("--namespace " + namespace) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectUnstructured(vwc.GetKind(), vwc.GetNamespace(), vwc.GetName()).To(BeEquivalentTo(vwc)) }) @@ -802,7 +776,6 @@ metadata: labels: app: gloo gloo: gateway - installationId: ` + helmTestInstallId + ` name: gateway namespace: ` + namespace + ` spec: @@ -861,12 +834,12 @@ spec: defaultMode: 420 secretName: gateway-validation-certs `) - prepareMakefile("--namespace " + namespace) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectUnstructured(gwDeployment.GetKind(), gwDeployment.GetNamespace(), gwDeployment.GetName()).To(BeEquivalentTo(gwDeployment)) }) It("creates the certgen job, rbac, and service account", func() { - prepareMakefile("--namespace " + namespace) + prepareMakefile(namespace, helmValues{}) job := makeUnstructured(` apiVersion: batch/v1 kind: Job @@ -874,11 +847,11 @@ metadata: labels: app: gloo gloo: gateway-certgen - installationId: ` + helmTestInstallId + ` name: gateway-certgen namespace: ` + namespace + ` annotations: - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-delete-policy": "hook-succeeded" "helm.sh/hook-weight": "10" spec: ttlSecondsAfterFinished: 60 @@ -916,9 +889,8 @@ metadata: labels: app: gloo gloo: rbac - installationId: ` + helmTestInstallId + ` annotations: - "helm.sh/hook": "pre-install" + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "5" rules: - apiGroups: [""] @@ -939,9 +911,8 @@ metadata: labels: app: gloo gloo: rbac - installationId: ` + helmTestInstallId + ` annotations: - "helm.sh/hook": "pre-install" + "helm.sh/hook": "pre-install,pre-upgrade" "helm.sh/hook-weight": "5" subjects: - kind: ServiceAccount @@ -963,9 +934,8 @@ metadata: labels: app: gloo gloo: gateway - installationId: ` + helmTestInstallId + ` annotations: - "helm.sh/hook": "pre-install" + "helm.sh/hook": "pre-install,pre-upgrade" "helm.sh/hook-weight": "5" name: gateway-certgen namespace: ` + namespace + ` @@ -1065,14 +1035,14 @@ metadata: }) It("should create a deployment", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectDeploymentAppsV1(glooDeployment) }) It("should disable usage stats collection when appropriate", func() { - helmFlags := fmt.Sprintf("--namespace %s --set namespace.create=true --set gloo.deployment.disableUsageStatistics=true", namespace) - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gloo.deployment.disableUsageStatistics=true"}, + }) glooDeployment.Spec.Template.Spec.Containers[0].Env = append(glooDeployment.Spec.Template.Spec.Containers[0].Env, v1.EnvVar{ Name: client.DisableUsageVar, @@ -1083,8 +1053,14 @@ metadata: }) It("has limits", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gloo.deployment.resources.limits.memory=2 --set gloo.deployment.resources.limits.cpu=3 --set gloo.deployment.resources.requests.memory=4 --set gloo.deployment.resources.requests.cpu=5" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gloo.deployment.resources.limits.memory=2", + "gloo.deployment.resources.limits.cpu=3", + "gloo.deployment.resources.requests.memory=4", + "gloo.deployment.resources.requests.cpu=5", + }, + }) // Add the limits we are testing: glooDeployment.Spec.Template.Spec.Containers[0].Resources = v1.ResourceRequirements{ @@ -1116,8 +1092,12 @@ metadata: deploy.Spec.Template.Spec.ServiceAccountName = "gloo" glooDeployment = deploy - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gloo.deployment.image.pullPolicy=Always --set gloo.deployment.image.registry=gcr.io/solo-public" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gloo.deployment.image.pullPolicy=Always", + "gloo.deployment.image.registry=gcr.io/solo-public", + }, + }) }) }) @@ -1187,14 +1167,19 @@ metadata: }) It("has a creates a deployment", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectDeploymentAppsV1(gatewayDeployment) }) It("has limits", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gateway.deployment.resources.limits.memory=2 --set gateway.deployment.resources.limits.cpu=3 --set gateway.deployment.resources.requests.memory=4 --set gateway.deployment.resources.requests.cpu=5" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gateway.deployment.resources.limits.memory=2", + "gateway.deployment.resources.limits.cpu=3", + "gateway.deployment.resources.requests.memory=4", + "gateway.deployment.resources.requests.cpu=5", + }, + }) // Add the limits we are testing: gatewayDeployment.Spec.Template.Spec.Containers[0].Resources = v1.ResourceRequirements{ @@ -1224,8 +1209,12 @@ metadata: updateDeployment(deploy) gatewayDeployment = deploy - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gateway.deployment.image.pullPolicy=Always --set gateway.deployment.image.registry=gcr.io/solo-public" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "gateway.deployment.image.pullPolicy=Always", + "gateway.deployment.image.registry=gcr.io/solo-public", + }, + }) }) }) @@ -1260,22 +1249,28 @@ metadata: }) It("has a creates a deployment", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{}) testManifest.ExpectDeploymentAppsV1(discoveryDeployment) }) It("disables probes", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set discovery.deployment.probes=false" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"discovery.deployment.probes=false"}, + }) discoveryDeployment.Spec.Template.Spec.Containers[0].ReadinessProbe = nil discoveryDeployment.Spec.Template.Spec.Containers[0].LivenessProbe = nil testManifest.ExpectDeploymentAppsV1(discoveryDeployment) }) It("has limits", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set discovery.deployment.resources.limits.memory=2 --set discovery.deployment.resources.limits.cpu=3 --set discovery.deployment.resources.requests.memory=4 --set discovery.deployment.resources.requests.cpu=5" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "discovery.deployment.resources.limits.memory=2", + "discovery.deployment.resources.limits.cpu=3", + "discovery.deployment.resources.requests.memory=4", + "discovery.deployment.resources.requests.cpu=5", + }, + }) // Add the limits we are testing: discoveryDeployment.Spec.Template.Spec.Containers[0].Resources = v1.ResourceRequirements{ @@ -1306,8 +1301,12 @@ metadata: discoveryDeployment = deploy deploy.Spec.Template.Spec.ServiceAccountName = "discovery" - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set discovery.deployment.image.pullPolicy=Always --set discovery.deployment.image.registry=gcr.io/solo-public" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{ + "discovery.deployment.image.pullPolicy=Always", + "discovery.deployment.image.registry=gcr.io/solo-public", + }, + }) }) }) @@ -1331,8 +1330,9 @@ metadata: Describe("gateway proxy - tracing config", func() { It("has a proxy without tracing", func() { - helmFlags := "--namespace " + namespace + " --set namespace.create=true --set gatewayProxies.gatewayProxy.service.extraAnnotations.test=test" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{" gatewayProxies.gatewayProxy.service.extraAnnotations.test=test"}, + }) proxySpec := make(map[string]string) proxySpec["envoy.yaml"] = confWithoutTracing cmRb := ResourceBuilder{ @@ -1346,7 +1346,7 @@ metadata: }) It("has a proxy with tracing provider", func() { - prepareMakefileFromValuesFile("install/test/val_tracing_provider.yaml") + prepareMakefileFromValuesFile("val_tracing_provider.yaml") proxySpec := make(map[string]string) proxySpec["envoy.yaml"] = confWithTracingProvider cmRb := ResourceBuilder{ @@ -1360,7 +1360,7 @@ metadata: }) It("has a proxy with tracing provider and cluster", func() { - prepareMakefileFromValuesFile("install/test/val_tracing_provider_cluster.yaml") + prepareMakefileFromValuesFile("val_tracing_provider_cluster.yaml") proxySpec := make(map[string]string) proxySpec["envoy.yaml"] = confWithTracingProviderCluster cmRb := ResourceBuilder{ @@ -1376,8 +1376,9 @@ metadata: Describe("gateway proxy -- readConfig config", func() { It("has a listener for reading a subset of the admin api", func() { - helmFlags := "--namespace " + namespace + " --set gatewayProxies.gatewayProxy.readConfig=true" - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesArgs: []string{"gatewayProxies.gatewayProxy.readConfig=true"}, + }) proxySpec := make(map[string]string) proxySpec["envoy.yaml"] = confWithReadConfig cmRb := ResourceBuilder{ @@ -1397,9 +1398,9 @@ metadata: // helper for passing a values file prepareMakefileFromValuesFile := func(valuesFile string) { - helmFlags := "--namespace " + namespace + - " -f " + valuesFile - prepareMakefile(helmFlags) + prepareMakefile(namespace, helmValues{ + valuesFile: valuesFile, + }) } It("merges the config correctly, allow override of ingress without altering gloo", func() { @@ -1563,7 +1564,7 @@ metadata: }, }, } - prepareMakefileFromValuesFile("install/test/merge_ingress_values.yaml") + prepareMakefileFromValuesFile("merge_ingress_values.yaml") testManifest.ExpectDeploymentAppsV1(glooDeploymentPostMerge) testManifest.ExpectDeploymentAppsV1(ingressDeploymentPostMerge) }) @@ -1573,14 +1574,6 @@ metadata: }) }) -func makeUnstructured(yam string) *unstructured.Unstructured { - jsn, err := yaml.YAMLToJSON([]byte(yam)) - Expect(err).NotTo(HaveOccurred()) - runtimeObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, jsn) - Expect(err).NotTo(HaveOccurred()) - return runtimeObj.(*unstructured.Unstructured) -} - func cloneMap(input map[string]string) map[string]string { ret := map[string]string{} for k, v := range input { diff --git a/install/test/rbac_test.go b/install/test/rbac_test.go index 0cd4966a7d6..05e1499f661 100644 --- a/install/test/rbac_test.go +++ b/install/test/rbac_test.go @@ -3,36 +3,44 @@ package test import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + . "github.com/solo-io/go-utils/manifesttestutils" rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - . "github.com/solo-io/go-utils/manifesttestutils" ) var _ = Describe("RBAC Test", func() { var ( - testManifest TestManifest - resourceBuilder ResourceBuilder - installationId = "rbac-test-install-id" - installationIdLabel = "installationId" + testManifest TestManifest + resourceBuilder ResourceBuilder ) - prepareMakefile := func(helmFlags string) { - testManifest = renderManifest(helmFlags + " --set global.glooInstallationId=" + installationId) + prepareMakefile := func(helmFlags ...string) { + tm, err := renderManifest(namespace, helmValues{ + valuesArgs: append([]string{}, helmFlags...), + }) + Expect(err).NotTo(HaveOccurred(), "Should be able to render the manifest in the RBAC unit test") + testManifest = tm } Context("implementation-agnostic permissions", func() { It("correctly assigns permissions for single-namespace gloo", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("namespace.create=true", "global.glooRbac.namespaced=true") permissions := GetServiceAccountPermissions("gloo-system") testManifest.ExpectPermissions(permissions) }) It("correctly assigns permissions for cluster-scoped gloo", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("namespace.create=true", "global.glooRbac.namespaced=false") permissions := GetServiceAccountPermissions("") testManifest.ExpectPermissions(permissions) }) + + It("creates no permissions when rbac is disabled", func() { + prepareMakefile("global.glooRbac.create=false") + testManifest.ExpectAll(func(resource *unstructured.Unstructured) { + Expect(resource.GetAPIVersion()).NotTo(ContainSubstring("rbac.authorization.k8s.io"), "Should not contain the RBAC API group") + }) + }) }) Context("all cluster-scoped RBAC resources", func() { @@ -50,12 +58,12 @@ var _ = Describe("RBAC Test", func() { It("is all named appropriately when a custom suffix is specified", func() { suffix := "test-suffix" - prepareMakefile("--namespace " + namespace + " --set global.glooRbac.nameSuffix=" + suffix) + prepareMakefile("global.glooRbac.nameSuffix=" + suffix) checkSuffix(suffix) }) It("is all named appropriately in a non-namespaced install", func() { - prepareMakefile("--namespace " + namespace) + prepareMakefile() checkSuffix(namespace) }) }) @@ -65,11 +73,9 @@ var _ = Describe("RBAC Test", func() { resourceBuilder = ResourceBuilder{ Name: "kube-resource-watcher", Labels: map[string]string{ - "app": "gloo", - "gloo": "rbac", - installationIdLabel: installationId, + "app": "gloo", + "gloo": "rbac", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "10"}, Rules: []rbacv1.PolicyRule{ { APIGroups: []string{""}, @@ -96,15 +102,14 @@ var _ = Describe("RBAC Test", func() { Context("cluster scope", func() { It("role", func() { resourceBuilder.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRole(resourceBuilder.GetClusterRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding-" + namespace - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" resourceBuilder.RoleRef.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRoleBinding(resourceBuilder.GetClusterRoleBinding()) }) }) @@ -115,14 +120,13 @@ var _ = Describe("RBAC Test", func() { }) It("role", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRole(resourceBuilder.GetRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding" - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRoleBinding(resourceBuilder.GetRoleBinding()) }) }) @@ -133,11 +137,9 @@ var _ = Describe("RBAC Test", func() { resourceBuilder = ResourceBuilder{ Name: "gloo-upstream-mutator", Labels: map[string]string{ - "app": "gloo", - "gloo": "rbac", - installationIdLabel: installationId, + "app": "gloo", + "gloo": "rbac", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "10"}, Rules: []rbacv1.PolicyRule{ { APIGroups: []string{"gloo.solo.io"}, @@ -160,15 +162,14 @@ var _ = Describe("RBAC Test", func() { Context("cluster scope", func() { It("role", func() { resourceBuilder.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRole(resourceBuilder.GetClusterRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding-" + namespace - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" resourceBuilder.RoleRef.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRoleBinding(resourceBuilder.GetClusterRoleBinding()) }) }) @@ -179,14 +180,13 @@ var _ = Describe("RBAC Test", func() { }) It("role", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRole(resourceBuilder.GetRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding" - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRoleBinding(resourceBuilder.GetRoleBinding()) }) }) @@ -197,11 +197,9 @@ var _ = Describe("RBAC Test", func() { resourceBuilder = ResourceBuilder{ Name: "gloo-resource-reader", Labels: map[string]string{ - "app": "gloo", - "gloo": "rbac", - installationIdLabel: installationId, + "app": "gloo", + "gloo": "rbac", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "10"}, Rules: []rbacv1.PolicyRule{ { APIGroups: []string{"gloo.solo.io", "enterprise.gloo.solo.io"}, @@ -229,15 +227,14 @@ var _ = Describe("RBAC Test", func() { Context("cluster scope", func() { It("role", func() { resourceBuilder.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRole(resourceBuilder.GetClusterRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding-" + namespace - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" resourceBuilder.RoleRef.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRoleBinding(resourceBuilder.GetClusterRoleBinding()) }) }) @@ -248,14 +245,13 @@ var _ = Describe("RBAC Test", func() { }) It("role", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRole(resourceBuilder.GetRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding" - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRoleBinding(resourceBuilder.GetRoleBinding()) }) }) @@ -266,11 +262,9 @@ var _ = Describe("RBAC Test", func() { resourceBuilder = ResourceBuilder{ Name: "settings-user", Labels: map[string]string{ - "app": "gloo", - "gloo": "rbac", - installationIdLabel: installationId, + "app": "gloo", + "gloo": "rbac", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "10"}, Rules: []rbacv1.PolicyRule{ { APIGroups: []string{"gloo.solo.io"}, @@ -301,15 +295,14 @@ var _ = Describe("RBAC Test", func() { Context("cluster scope", func() { It("role", func() { resourceBuilder.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRole(resourceBuilder.GetClusterRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding-" + namespace - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" resourceBuilder.RoleRef.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRoleBinding(resourceBuilder.GetClusterRoleBinding()) }) }) @@ -320,14 +313,13 @@ var _ = Describe("RBAC Test", func() { }) It("role", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRole(resourceBuilder.GetRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding" - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRoleBinding(resourceBuilder.GetRoleBinding()) }) }) @@ -338,11 +330,9 @@ var _ = Describe("RBAC Test", func() { resourceBuilder = ResourceBuilder{ Name: "gloo-resource-mutator", Labels: map[string]string{ - "app": "gloo", - "gloo": "rbac", - installationIdLabel: installationId, + "app": "gloo", + "gloo": "rbac", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "10"}, Rules: []rbacv1.PolicyRule{ { APIGroups: []string{"gloo.solo.io"}, @@ -365,15 +355,14 @@ var _ = Describe("RBAC Test", func() { Context("cluster scope", func() { It("role", func() { resourceBuilder.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRole(resourceBuilder.GetClusterRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding-" + namespace - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" resourceBuilder.RoleRef.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRoleBinding(resourceBuilder.GetClusterRoleBinding()) }) }) @@ -384,14 +373,13 @@ var _ = Describe("RBAC Test", func() { }) It("role", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRole(resourceBuilder.GetRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding" - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRoleBinding(resourceBuilder.GetRoleBinding()) }) }) @@ -402,11 +390,9 @@ var _ = Describe("RBAC Test", func() { resourceBuilder = ResourceBuilder{ Name: "gateway-resource-reader", Labels: map[string]string{ - "app": "gloo", - "gloo": "rbac", - installationIdLabel: installationId, + "app": "gloo", + "gloo": "rbac", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "10"}, Rules: []rbacv1.PolicyRule{ { APIGroups: []string{"gateway.solo.io"}, @@ -433,15 +419,14 @@ var _ = Describe("RBAC Test", func() { Context("cluster scope", func() { It("role", func() { resourceBuilder.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRole(resourceBuilder.GetClusterRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding-" + namespace - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" resourceBuilder.RoleRef.Name += "-" + namespace - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=false") + prepareMakefile("global.glooRbac.namespaced=false") testManifest.ExpectClusterRoleBinding(resourceBuilder.GetClusterRoleBinding()) }) }) @@ -452,14 +437,13 @@ var _ = Describe("RBAC Test", func() { }) It("role", func() { - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRole(resourceBuilder.GetRole()) }) It("role binding", func() { resourceBuilder.Name += "-binding" - resourceBuilder.Annotations["helm.sh/hook-weight"] = "15" - prepareMakefile("--namespace " + namespace + " --set namespace.create=true --set global.glooRbac.namespaced=true") + prepareMakefile("global.glooRbac.namespaced=true") testManifest.ExpectRoleBinding(resourceBuilder.GetRoleBinding()) }) }) diff --git a/install/test/svc_accnt_test.go b/install/test/svc_accnt_test.go index 5826a5be01a..21b2c990d50 100644 --- a/install/test/svc_accnt_test.go +++ b/install/test/svc_accnt_test.go @@ -3,6 +3,7 @@ package test import ( . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" . "github.com/solo-io/go-utils/manifesttestutils" ) @@ -10,15 +11,17 @@ var _ = Describe("SVC Accnt Test", func() { var ( testManifest TestManifest resourceBuilder ResourceBuilder - installationId = "svc-accnt-installation-id" ) - prepareMakefile := func(name, helmFlags string) { + prepareMakefile := func(name string, helmFlags []string) { resourceBuilder.Name = name resourceBuilder.Labels["gloo"] = name - resourceBuilder.Labels["installationId"] = installationId - testManifest = renderManifest(helmFlags + " --set global.glooInstallationId=" + installationId) + tm, err := renderManifest(namespace, helmValues{ + valuesArgs: helmFlags, + }) + Expect(err).NotTo(HaveOccurred(), "Should be able to render the manifest in the service account unit test") + testManifest = tm } BeforeEach(func() { @@ -27,33 +30,32 @@ var _ = Describe("SVC Accnt Test", func() { Labels: map[string]string{ "app": "gloo", }, - Annotations: map[string]string{"helm.sh/hook": "pre-install", "helm.sh/hook-weight": "5"}, } }) It("gloo", func() { - prepareMakefile("gloo", "--namespace "+namespace+" --set namespace.create=true --set rbac.namespaced=false") + prepareMakefile("gloo", []string{"rbac.namespaced=false"}) testManifest.ExpectServiceAccount(resourceBuilder.GetServiceAccount()) }) It("discovery", func() { - prepareMakefile("discovery", "--namespace "+namespace+" --set namespace.create=true --set rbac.namespaced=false") + prepareMakefile("discovery", []string{"rbac.namespaced=false"}) testManifest.ExpectServiceAccount(resourceBuilder.GetServiceAccount()) }) It("gateway", func() { - prepareMakefile("gateway", "--namespace "+namespace+" --set namespace.create=true --set rbac.namespaced=false") + prepareMakefile("gateway", []string{"rbac.namespaced=false"}) testManifest.ExpectServiceAccount(resourceBuilder.GetServiceAccount()) }) It("gateway-proxy", func() { - prepareMakefile("gateway-proxy", "--namespace "+namespace+" --set namespace.create=true --set rbac.namespaced=false") + prepareMakefile("gateway-proxy", []string{"rbac.namespaced=false"}) svcAccount := resourceBuilder.GetServiceAccount() testManifest.ExpectServiceAccount(svcAccount) }) It("gateway-proxy disables svc account", func() { - prepareMakefile("gateway-proxy", "--namespace "+namespace+" --set namespace.create=true --set rbac.namespaced=false --set gateway.proxyServiceAccount.disableAutomount=true") + prepareMakefile("gateway-proxy", []string{"rbac.namespaced=false", "gateway.proxyServiceAccount.disableAutomount=true"}) svcAccount := resourceBuilder.GetServiceAccount() falze := false svcAccount.AutomountServiceAccountToken = &falze diff --git a/jobs/pkg/kube/validating_webhook_configuration_test.go b/jobs/pkg/kube/validating_webhook_configuration_test.go index ccada21c546..d5e7258fd59 100644 --- a/jobs/pkg/kube/validating_webhook_configuration_test.go +++ b/jobs/pkg/kube/validating_webhook_configuration_test.go @@ -25,7 +25,7 @@ var _ = Describe("ValidatingWebhookConfiguration", func() { expectedVwc, err := kube.AdmissionregistrationV1beta1().ValidatingWebhookConfigurations().Create(&v1beta1.ValidatingWebhookConfiguration{ ObjectMeta: metav1.ObjectMeta{Name: vwcName}, - Webhooks: []v1beta1.Webhook{ + Webhooks: []v1beta1.ValidatingWebhook{ {Name: "ignored"}, { Name: "foo", diff --git a/pkg/cliutil/helm/hooks.go b/pkg/cliutil/helm/hooks.go new file mode 100644 index 00000000000..681fd1f4b7f --- /dev/null +++ b/pkg/cliutil/helm/hooks.go @@ -0,0 +1,34 @@ +package helm + +import ( + "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" + "github.com/solo-io/go-utils/errors" + "helm.sh/helm/v3/pkg/release" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + _ "k8s.io/client-go/plugin/pkg/client/auth" + "sigs.k8s.io/yaml" +) + +// Some resources are duplicated because of weirdness with Helm hooks. +// A job needs a service account/rbac resources, and we would like those to be cleaned up after the job is complete +// this isn't really expressible cleanly through Helm hooks. +func GetNonCleanupHooks(hooks []*release.Hook) (results []*release.Hook, err error) { + for _, hook := range hooks { + // Parse the resource in order to access the annotations + var resource struct{ Metadata v1.ObjectMeta } + if err := yaml.Unmarshal([]byte(hook.Manifest), &resource); err != nil { + return nil, errors.Wrapf(err, "parsing resource: %s", hook.Manifest) + } + + // Skip hook cleanup resources + if annotations := resource.Metadata.Annotations; len(annotations) > 0 { + if _, ok := annotations[constants.HookCleanupResourceAnnotation]; ok { + continue + } + } + + results = append(results, hook) + } + + return results, nil +} diff --git a/pkg/cliutil/install/chart.go b/pkg/cliutil/install/chart.go deleted file mode 100644 index 66e52984842..00000000000 --- a/pkg/cliutil/install/chart.go +++ /dev/null @@ -1,166 +0,0 @@ -package install - -import ( - "io/ioutil" - "log" - "strings" - - "github.com/ghodss/yaml" - "github.com/solo-io/gloo/install/helm/gloo/generate" - - "github.com/solo-io/gloo/pkg/cliutil" - "github.com/solo-io/go-utils/errors" - "k8s.io/helm/pkg/chartutil" - "k8s.io/helm/pkg/manifest" - "k8s.io/helm/pkg/proto/hapi/chart" - "k8s.io/helm/pkg/renderutil" - "k8s.io/helm/pkg/tiller" -) - -const ( - YamlDocumentSeparator = "\n---\n" - CrdKindName = "CustomResourceDefinition" - NotesFileName = "NOTES.txt" -) - -// Returns the Helm chart archive located at the given URI (can be either an http(s) address or a file path) -func GetHelmArchive(chartArchiveUri string) (*chart.Chart, error) { - - // Download chart archive - chartFile, err := cliutil.GetResource(chartArchiveUri) - if err != nil { - return nil, err - } - //noinspection GoUnhandledErrorResult - defer chartFile.Close() - - // Check chart requirements to make sure all dependencies are present in /charts - helmChart, err := chartutil.LoadArchive(chartFile) - if err != nil { - return nil, errors.Wrapf(err, "loading chart archive") - } - return helmChart, err -} - -// use to overwrite / modify values file before passing to helm -type ValuesCallback func(config *generate.HelmConfig) - -// Searches for the value file with the given name in the chart and returns its raw content. -// NOTE: this also sets the namespace.create attribute to 'true'. -func GetValuesFromFileIncludingExtra(helmChart *chart.Chart, fileName string, userValuesFileNames []string, extraValues chartutil.Values, valueOptions ...ValuesCallback) (*chart.Config, error) { - rawAdditionalValues := "{}" - if fileName != "" { - var found bool - for _, valueFile := range helmChart.Files { - if valueFile.TypeUrl == fileName { - rawAdditionalValues = string(valueFile.Value) - found = true - break - } - } - if !found { - return nil, errors.Errorf("could not find value file [%s] in Helm chart archive", fileName) - } - } - - // Convert value file content to struct - valueStruct := &generate.HelmConfig{} - if err := yaml.Unmarshal([]byte(rawAdditionalValues), valueStruct); err != nil { - return nil, errors.Errorf("invalid format for value file [%s] in Helm chart archive", fileName) - } - - // Namespace creation is disabled by default, otherwise install with helm will fail - // (`helm install --namespace=` creates the given namespace) - valueStruct.Namespace = &generate.Namespace{Create: true} - - for _, opt := range valueOptions { - opt(valueStruct) - } - - valueBytes, err := yaml.Marshal(valueStruct) - if err != nil { - return nil, errors.Wrapf(err, "failed marshaling value file struct") - } - - // unmarshal to helm values so we can merge - values, err := chartutil.ReadValues(valueBytes) - if err != nil { - return nil, errors.Wrapf(err, "failed reading values") - } - - if extraValues != nil { - values.MergeInto(extraValues) - } - - for _, userValuesFileName := range userValuesFileNames { - if userValuesFileName == "" { - continue - } - uservalues, err := ioutil.ReadFile(userValuesFileName) - if err != nil { - return nil, errors.Wrapf(err, "failed reading user values "+userValuesFileName) - } - userValues, err := chartutil.ReadValues(uservalues) - if err != nil { - return nil, errors.Wrapf(err, "failed parsing user values") - } - values.MergeInto(userValues) - } - - valuesString, err := values.YAML() - if err != nil { - return nil, errors.Wrapf(err, "failed values struct") - } - - // NOTE: config.Values is never used by helm - return &chart.Config{Raw: valuesString}, nil -} - -func GetValuesFromFile(helmChart *chart.Chart, fileName string) (*chart.Config, error) { - return GetValuesFromFileIncludingExtra(helmChart, fileName, []string{""}, nil) -} - -// Renders the content of the given Helm chart archive: -// - helmChart: the Gloo helm chart archive -// - overrideValues: value to override the chart defaults. NOTE: passing `nil` means "ignore the chart's default values"! -// - renderOptions: options to be used in the render -// - filterFunctions: a collection of functions that can be used to filter and transform the contents of the manifest. Will be applied in the given order. -func RenderChart(helmChart *chart.Chart, overrideValues *chart.Config, renderOptions renderutil.Options, filterFunctions ...ManifestFilterFunc) ([]byte, error) { - // Helm uses the standard go log package. Redirect its output to the debug.log file so that we don't - // expose useless warnings to the user. - log.SetOutput(cliutil.GetLogger()) - - // - Rendering the helm chart locally in Go side-effects the provided helm chart, removing any dependencies - // that were not needed but neglects to remove those same deps from the requirements.lock file. - // Thus, if we try to render the same chart twice in a row (while disabling some subcharts), the second - // requirements.lock check (CheckDependencies() in renderutil.Render()) will fail because it expects all - // subcharts to be there, and the provided chart has already had its dependencies pruned - // - To avoid this, we make a copy of the dependencies before render, and restore them to undo the side-effect - var origDeps []*chart.Chart - for _, dep := range helmChart.Dependencies { - origDeps = append(origDeps, dep) - } - renderedTemplates, err := renderutil.Render(helmChart, overrideValues, renderOptions) - if err != nil { - return nil, err - } - helmChart.Dependencies = origDeps - - manifests := tiller.SortByKind(manifest.SplitManifests(renderedTemplates)) - - // Apply filter functions to manifests - for _, filterFunc := range filterFunctions { - manifests, err = filterFunc(manifests) - if err != nil { - return nil, errors.Wrapf(err, "applying filter function") - } - } - - // Collect manifests - var manifestsContent []string - for _, m := range manifests { - manifestsContent = append(manifestsContent, m.Content) - } - - return []byte(strings.Join(manifestsContent, YamlDocumentSeparator)), nil -} diff --git a/pkg/cliutil/install/filters.go b/pkg/cliutil/install/filters.go deleted file mode 100644 index 4470554ad6d..00000000000 --- a/pkg/cliutil/install/filters.go +++ /dev/null @@ -1,200 +0,0 @@ -package install - -import ( - "regexp" - "strings" - - "github.com/ghodss/yaml" - "github.com/helm/helm/pkg/hooks" - "github.com/solo-io/go-utils/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "k8s.io/helm/pkg/manifest" -) - -// This type represents a function that can be used to filter and transform a list of manifests. -// It returns three values: -// - skip: if true, the input manifest will be excluded from the output -// - content: if skip is false, this value will be included in the output manifest -// - err: if != nil, the whole manifest retrieval operation will fail -type ManifestFilterFunc func(input []manifest.Manifest) (output []manifest.Manifest, err error) - -// We need to define this ourselves, because if we unmarshal into `apiextensions.CustomResourceDefinition` -// we don't get the ObjectMeta (in the yaml they are nested under `metadata`, but the k8s struct has -// them as top level fields...) -type ResourceType struct { - Metadata v1.ObjectMeta - v1.TypeMeta -} - -// Returns only non-empty manifests -var ExcludeEmptyManifests ManifestFilterFunc = func(input []manifest.Manifest) ([]manifest.Manifest, error) { - var output []manifest.Manifest - for _, manifest := range input { - if !IsEmptyManifest(manifest.Content) { - output = append(output, manifest) - } - - } - return output, nil -} - -type ResourceMatcherFunc func(resource ResourceType) (bool, error) - -var preInstallMatcher ResourceMatcherFunc = func(resource ResourceType) (bool, error) { - helmPreInstallHook, ok := resource.Metadata.Annotations[hooks.HookAnno] - if !ok || helmPreInstallHook != hooks.PreInstall { - return false, nil - } - return true, nil -} - -var crdInstallMatcher ResourceMatcherFunc = func(resource ResourceType) (bool, error) { - crdKind := resource.TypeMeta.Kind == CrdKindName - if crdKind { - // Check whether the CRD is a Helm "crd-install" hook. - // If not, throw an error, because this will cause race conditions when installing with Helm (which is - // not the case here, but we want to validate the manifests whenever we have the chance) - helmCrdInstallHookAnnotation, ok := resource.Metadata.Annotations[hooks.HookAnno] - if !ok || helmCrdInstallHookAnnotation != hooks.CRDInstall { - return crdKind, errors.Errorf("CRD [%s] must be annotated as a Helm '%s' hook", resource.Metadata.Name, hooks.CRDInstall) - } - } - return crdKind, nil -} - -var nonCrdInstallMatcher ResourceMatcherFunc = func(resource ResourceType) (bool, error) { - isCrdInstall, err := crdInstallMatcher(resource) - return !isCrdInstall, err -} - -var nonPreInstallMatcher ResourceMatcherFunc = func(resource ResourceType) (bool, error) { - isPreInstall, err := preInstallMatcher(resource) - return !isPreInstall, err -} - -var excludeByMatcher = func(input []manifest.Manifest, matches ResourceMatcherFunc) (output []manifest.Manifest, allResourceNames []string, err error) { - for _, man := range input { - content, resourceNames, err := excludeManifestContentByMatcher(man.Content, matches) - if err != nil { - return nil, nil, err - } - allResourceNames = append(allResourceNames, resourceNames...) - output = append(output, manifest.Manifest{ - Name: man.Name, - Head: man.Head, - Content: content, - }) - } - return -} - -var excludeManifestContentByMatcher = func(input string, matches ResourceMatcherFunc) (output string, resourceNames []string, err error) { - var nonMatching []string - for _, doc := range strings.Split(input, "---") { - if strings.TrimSpace(doc) == "" { - continue - } - - var resource ResourceType - if err := yaml.Unmarshal([]byte(doc), &resource); err != nil { - return "", nil, errors.Wrapf(err, "parsing resource: %s", doc) - } - - isMatch, err := matches(resource) - if err != nil { - return "", nil, err - } - if !isMatch { - resourceNames = append(resourceNames, resource.Metadata.Name) - nonMatching = append(nonMatching, doc) - } - } - output = strings.Join(nonMatching, YamlDocumentSeparator) - return -} - -var ExcludeMatchingResources = func(matcherFunc ResourceMatcherFunc) ManifestFilterFunc { - if matcherFunc == nil { - return IdentityFilterFunc - } - return func(input []manifest.Manifest) (output []manifest.Manifest, err error) { - manifest, _, err := excludeByMatcher(input, matcherFunc) - return manifest, err - } -} - -var IdentityFilterFunc ManifestFilterFunc = func(input []manifest.Manifest) (output []manifest.Manifest, err error) { - output = input - return -} - -// Filters out any pre-install from each manifest -var ExcludePreInstall ManifestFilterFunc = func(input []manifest.Manifest) (output []manifest.Manifest, err error) { - manifest, _, err := excludeByMatcher(input, preInstallMatcher) - return manifest, err -} - -// Filters out anything but pre-install -var IncludeOnlyPreInstall ManifestFilterFunc = func(input []manifest.Manifest) (output []manifest.Manifest, err error) { - manifest, _, err := excludeByMatcher(input, nonPreInstallMatcher) - return manifest, err -} - -// Filters out any CRD from each manifest -var ExcludeCrds ManifestFilterFunc = func(input []manifest.Manifest) (output []manifest.Manifest, err error) { - manifest, _, err := excludeByMatcher(input, crdInstallMatcher) - return manifest, err -} - -var ExcludeNonCrds = func(input []manifest.Manifest) (output []manifest.Manifest, names []string, err error) { - return excludeByMatcher(input, nonCrdInstallMatcher) -} - -// Filters out NOTES.txt files -var ExcludeNotes ManifestFilterFunc = func(input []manifest.Manifest) (output []manifest.Manifest, err error) { - for _, man := range input { - if strings.HasSuffix(man.Name, NotesFileName) { - continue - } - output = append(output, man) - } - return -} - -func KnativeResourceFilterFunction(skipKnative bool) ManifestFilterFunc { - return func(input []manifest.Manifest) ([]manifest.Manifest, error) { - var output []manifest.Manifest - for _, man := range input { - if strings.Contains(man.Name, "knative") && skipKnative { - continue - } - output = append(output, man) - } - return output, nil - } -} - -var commentRegex = regexp.MustCompile("#.*") - -func IsEmptyManifest(manifest string) bool { - removeComments := commentRegex.ReplaceAllString(manifest, "") - removeNewlines := strings.Replace(removeComments, "\n", "", -1) - removeDashes := strings.Replace(removeNewlines, "---", "", -1) - return removeDashes == "" -} - -func GetResources(manifest string) ([]ResourceType, error) { - var resources []ResourceType - for _, doc := range strings.Split(manifest, "---") { - if strings.TrimSpace(doc) == "" { - continue - } - var resource ResourceType - if err := yaml.Unmarshal([]byte(doc), &resource); err != nil { - return nil, errors.Wrapf(err, "parsing resource: %s", doc) - } - resources = append(resources, resource) - } - return resources, nil -} diff --git a/projects/clusteringress/api/external/knative/cluster_ingress.go b/projects/clusteringress/api/external/knative/cluster_ingress.go index 5b442f33d59..85e9912fd47 100644 --- a/projects/clusteringress/api/external/knative/cluster_ingress.go +++ b/projects/clusteringress/api/external/knative/cluster_ingress.go @@ -8,7 +8,7 @@ import ( "knative.dev/serving/pkg/apis/networking/v1alpha1" ) -type ClusterIngress v1alpha1.ClusterIngress +type ClusterIngress v1alpha1.Ingress func (p *ClusterIngress) GetMetadata() core.Metadata { return kubeutils.FromKubeMeta(p.ObjectMeta) @@ -23,8 +23,8 @@ func (p *ClusterIngress) Equal(that interface{}) bool { } func (p *ClusterIngress) Clone() *ClusterIngress { - ci := v1alpha1.ClusterIngress(*p) - copy := ci.DeepCopy() - newCi := ClusterIngress(*copy) + ci := v1alpha1.Ingress(*p) + ciCopy := ci.DeepCopy() + newCi := ClusterIngress(*ciCopy) return &newCi } diff --git a/projects/clusteringress/pkg/api/custom/knative/cache.go b/projects/clusteringress/pkg/api/custom/knative/cache.go index bbffc785d7c..d29b51e40bc 100644 --- a/projects/clusteringress/pkg/api/custom/knative/cache.go +++ b/projects/clusteringress/pkg/api/custom/knative/cache.go @@ -12,13 +12,13 @@ import ( ) type Cache interface { - ClusterIngressLister() knativelisters.ClusterIngressLister + ClusterIngressLister() knativelisters.IngressLister Subscribe() <-chan struct{} Unsubscribe(<-chan struct{}) } type knativeCache struct { - clusterIngress knativelisters.ClusterIngressLister + clusterIngress knativelisters.IngressLister cacheUpdatedWatchers []chan struct{} cacheUpdatedWatchersMutex sync.Mutex @@ -30,7 +30,7 @@ func NewClusterIngreessCache(ctx context.Context, knativeClient knativeclient.In resyncDuration := 12 * time.Hour sharedInformerFactory := knativeinformers.NewSharedInformerFactory(knativeClient, resyncDuration) - clusterIngress := sharedInformerFactory.Networking().V1alpha1().ClusterIngresses() + clusterIngress := sharedInformerFactory.Networking().V1alpha1().Ingresses() k := &knativeCache{ clusterIngress: clusterIngress.Lister(), @@ -49,7 +49,7 @@ func NewClusterIngreessCache(ctx context.Context, knativeClient knativeclient.In return k, nil } -func (k *knativeCache) ClusterIngressLister() knativelisters.ClusterIngressLister { +func (k *knativeCache) ClusterIngressLister() knativelisters.IngressLister { return k.clusterIngress } diff --git a/projects/clusteringress/pkg/api/custom/knative/knative_clusteringress_client.go b/projects/clusteringress/pkg/api/custom/knative/knative_clusteringress_client.go index d21679e9d80..a9f8f9222bc 100644 --- a/projects/clusteringress/pkg/api/custom/knative/knative_clusteringress_client.go +++ b/projects/clusteringress/pkg/api/custom/knative/knative_clusteringress_client.go @@ -27,7 +27,7 @@ func NewResourceClient(knativeClient knativeclient.Interface, cache Cache) *Reso } } -func FromKube(ci *knativev1alpha1.ClusterIngress) *v1alpha1.ClusterIngress { +func FromKube(ci *knativev1alpha1.Ingress) *v1alpha1.ClusterIngress { deepCopy := ci.DeepCopy() baseType := knative.ClusterIngress(*deepCopy) resource := &v1alpha1.ClusterIngress{ @@ -37,13 +37,13 @@ func FromKube(ci *knativev1alpha1.ClusterIngress) *v1alpha1.ClusterIngress { return resource } -func ToKube(resource resources.Resource) (*knativev1alpha1.ClusterIngress, error) { +func ToKube(resource resources.Resource) (*knativev1alpha1.Ingress, error) { clusterIngressResource, ok := resource.(*v1alpha1.ClusterIngress) if !ok { return nil, errors.Errorf("internal error: invalid resource %v passed to clusteringress client", resources.Kind(resource)) } - clusterIngress := knativev1alpha1.ClusterIngress(clusterIngressResource.ClusterIngress) + clusterIngress := knativev1alpha1.Ingress(clusterIngressResource.ClusterIngress) return &clusterIngress, nil } @@ -148,6 +148,6 @@ func (rc *ResourceClient) Watch(_ string, opts clients.WatchOpts) (<-chan resour } func (rc *ResourceClient) exist(namespace, name string) bool { - _, err := rc.knativeClient.NetworkingV1alpha1().ClusterIngresses().Get(name, metav1.GetOptions{}) + _, err := rc.knativeClient.NetworkingV1alpha1().Ingresses(namespace).Get(name, metav1.GetOptions{}) return err == nil } diff --git a/projects/clusteringress/pkg/translator/translate_test.go b/projects/clusteringress/pkg/translator/translate_test.go index 6a5703467c7..295a294cfed 100644 --- a/projects/clusteringress/pkg/translator/translate_test.go +++ b/projects/clusteringress/pkg/translator/translate_test.go @@ -29,7 +29,7 @@ var _ = Describe("Translate", func() { serviceNamespace := "peteszah-service-namespace" servicePort := int32(80) secretName := "areallygreatsecret" - ingress := &v1alpha1.ClusterIngress{ + ingress := &v1alpha1.Ingress{ ObjectMeta: metav1.ObjectMeta{ Name: "ing", Namespace: namespace, @@ -95,7 +95,7 @@ var _ = Describe("Translate", func() { }, }, } - ingressTls := &v1alpha1.ClusterIngress{ + ingressTls := &v1alpha1.Ingress{ ObjectMeta: metav1.ObjectMeta{ Name: "ing-tls", Namespace: namespace, diff --git a/projects/clusteringress/pkg/translator/translator_syncer.go b/projects/clusteringress/pkg/translator/translator_syncer.go index 3aeefbcfb80..995979a0d1a 100644 --- a/projects/clusteringress/pkg/translator/translator_syncer.go +++ b/projects/clusteringress/pkg/translator/translator_syncer.go @@ -20,22 +20,22 @@ import ( ) type translatorSyncer struct { - proxyAddress string - writeNamespace string - writeErrs chan error - proxyClient gloov1.ProxyClient - proxyReconciler gloov1.ProxyReconciler - clusterIngressClient knativeclient.ClusterIngressInterface + proxyAddress string + writeNamespace string + writeErrs chan error + proxyClient gloov1.ProxyClient + proxyReconciler gloov1.ProxyReconciler + ingressClient knativeclient.IngressesGetter } -func NewSyncer(proxyAddress, writeNamespace string, proxyClient gloov1.ProxyClient, clusterIngressClient knativeclient.ClusterIngressInterface, writeErrs chan error) v1.TranslatorSyncer { +func NewSyncer(proxyAddress, writeNamespace string, proxyClient gloov1.ProxyClient, ingressClient knativeclient.IngressesGetter, writeErrs chan error) v1.TranslatorSyncer { return &translatorSyncer{ - proxyAddress: proxyAddress, - writeNamespace: writeNamespace, - writeErrs: writeErrs, - proxyClient: proxyClient, - clusterIngressClient: clusterIngressClient, - proxyReconciler: gloov1.NewProxyReconciler(proxyClient), + proxyAddress: proxyAddress, + writeNamespace: writeNamespace, + writeErrs: writeErrs, + proxyClient: proxyClient, + ingressClient: ingressClient, + proxyReconciler: gloov1.NewProxyReconciler(proxyClient), } } @@ -123,9 +123,9 @@ func (s *translatorSyncer) propagateProxyStatus(ctx context.Context, proxy *gloo } func (s *translatorSyncer) markClusterIngressesReady(ctx context.Context, clusterIngresses v1alpha1.ClusterIngressList) error { - var updatedClusterIngresses []*knativev1alpha1.ClusterIngress + var updatedClusterIngresses []*knativev1alpha1.Ingress for _, wrappedCi := range clusterIngresses { - ci := knativev1alpha1.ClusterIngress(wrappedCi.ClusterIngress) + ci := knativev1alpha1.Ingress(wrappedCi.ClusterIngress) if ci.Status.ObservedGeneration == ci.ObjectMeta.Generation { continue } @@ -139,7 +139,7 @@ func (s *translatorSyncer) markClusterIngressesReady(ctx context.Context, cluste updatedClusterIngresses = append(updatedClusterIngresses, &ci) } for _, ci := range updatedClusterIngresses { - if _, err := s.clusterIngressClient.UpdateStatus(ci); err != nil { + if _, err := s.ingressClient.Ingresses(ci.Namespace).UpdateStatus(ci); err != nil { contextutils.LoggerFrom(ctx).Errorf("failed to update ClusterIngress %v status with error %v", ci.Name, err) } } diff --git a/projects/clusteringress/pkg/translator/translator_syncer_test.go b/projects/clusteringress/pkg/translator/translator_syncer_test.go index 606144c2b6d..dfb8e17973f 100644 --- a/projects/clusteringress/pkg/translator/translator_syncer_test.go +++ b/projects/clusteringress/pkg/translator/translator_syncer_test.go @@ -4,6 +4,8 @@ import ( "context" "time" + alpha1 "knative.dev/serving/pkg/client/clientset/versioned/typed/networking/v1alpha1" + . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/solo-io/gloo/projects/clusteringress/api/external/knative" @@ -27,7 +29,8 @@ var _ = Describe("TranslatorSyncer", func() { clusterIngress := &v1alpha1.ClusterIngress{ClusterIngress: knative.ClusterIngress{ ObjectMeta: v12.ObjectMeta{Generation: 1}, }} - knativeClient := &mockCiClient{ci: toKube(clusterIngress)} + knativeClient := &mockIngressesGetter{ + ciClient: &mockCiClient{ci: toKube(clusterIngress)}} syncer := NewSyncer(proxyAddress, namespace, proxyClient, knativeClient, make(chan error)).(*translatorSyncer) proxy := &v1.Proxy{Metadata: core.Metadata{Name: "hi", Namespace: "howareyou"}} @@ -45,31 +48,37 @@ var _ = Describe("TranslatorSyncer", func() { err := syncer.propagateProxyStatus(context.TODO(), proxy, v1alpha1.ClusterIngressList{clusterIngress}) Expect(err).NotTo(HaveOccurred()) - var ci *v1alpha12.ClusterIngress - ci, err = knativeClient.Get(clusterIngress.Name, v12.GetOptions{}) + var ci *v1alpha12.Ingress + ci, err = knativeClient.ciClient.Get(clusterIngress.Name, v12.GetOptions{}) Expect(err).NotTo(HaveOccurred()) Expect(ci.Status.IsReady()).To(BeTrue()) }) }) -func toKube(ci *v1alpha1.ClusterIngress) *v1alpha12.ClusterIngress { - kubeCi := v1alpha12.ClusterIngress(ci.ClusterIngress) +type mockIngressesGetter struct{ ciClient alpha1.IngressInterface } + +func (m *mockIngressesGetter) Ingresses(namespace string) alpha1.IngressInterface { + return m.ciClient +} + +func toKube(ci *v1alpha1.ClusterIngress) *v1alpha12.Ingress { + kubeCi := v1alpha12.Ingress(ci.ClusterIngress) return &kubeCi } -type mockCiClient struct{ ci *v1alpha12.ClusterIngress } +type mockCiClient struct{ ci *v1alpha12.Ingress } -func (c *mockCiClient) UpdateStatus(ci *v1alpha12.ClusterIngress) (*v1alpha12.ClusterIngress, error) { +func (c *mockCiClient) UpdateStatus(ci *v1alpha12.Ingress) (*v1alpha12.Ingress, error) { c.ci.Status = ci.Status return ci, nil } -func (*mockCiClient) Create(*v1alpha12.ClusterIngress) (*v1alpha12.ClusterIngress, error) { +func (*mockCiClient) Create(*v1alpha12.Ingress) (*v1alpha12.Ingress, error) { panic("implement me") } -func (*mockCiClient) Update(*v1alpha12.ClusterIngress) (*v1alpha12.ClusterIngress, error) { +func (*mockCiClient) Update(*v1alpha12.Ingress) (*v1alpha12.Ingress, error) { panic("implement me") } @@ -81,11 +90,11 @@ func (*mockCiClient) DeleteCollection(options *v12.DeleteOptions, listOptions v1 panic("implement me") } -func (c *mockCiClient) Get(name string, options v12.GetOptions) (*v1alpha12.ClusterIngress, error) { +func (c *mockCiClient) Get(name string, options v12.GetOptions) (*v1alpha12.Ingress, error) { return c.ci, nil } -func (*mockCiClient) List(opts v12.ListOptions) (*v1alpha12.ClusterIngressList, error) { +func (*mockCiClient) List(opts v12.ListOptions) (*v1alpha12.IngressList, error) { panic("implement me") } @@ -93,6 +102,6 @@ func (*mockCiClient) Watch(opts v12.ListOptions) (watch.Interface, error) { panic("implement me") } -func (*mockCiClient) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha12.ClusterIngress, err error) { +func (*mockCiClient) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha12.Ingress, err error) { panic("implement me") } diff --git a/projects/gloo/cli/pkg/cmd/install/enterprise.go b/projects/gloo/cli/pkg/cmd/install/enterprise.go index 485d190452e..36c16c7efa6 100644 --- a/projects/gloo/cli/pkg/cmd/install/enterprise.go +++ b/projects/gloo/cli/pkg/cmd/install/enterprise.go @@ -1,19 +1,10 @@ package install import ( - "fmt" - "os" - - "github.com/solo-io/gloo/pkg/cliutil" - "github.com/solo-io/gloo/pkg/cliutil/install" - "github.com/solo-io/gloo/pkg/version" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" "github.com/solo-io/gloo/projects/gloo/cli/pkg/flagutils" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/helpers" "github.com/solo-io/go-utils/errors" "github.com/spf13/cobra" - kubeerrors "k8s.io/apimachinery/pkg/api/errors" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" _ "k8s.io/client-go/plugin/pkg/client/auth" ) @@ -24,106 +15,29 @@ const ( func enterpriseCmd(opts *options.Options) *cobra.Command { cmd := &cobra.Command{ Use: "enterprise", - Short: "install the Gloo Enterprise Gateway on kubernetes", + Short: "install the Gloo Enterprise Gateway on Kubernetes", Long: "requires kubectl to be installed", PreRun: setVerboseMode(opts), RunE: func(cmd *cobra.Command, args []string) error { - if err := installGlooE(opts); err != nil { - return errors.Wrapf(err, "installing gloo enterprise in gateway mode") - } - return nil - }, - } - pflags := cmd.PersistentFlags() - flagutils.AddEnterpriseInstallFlags(pflags, &opts.Install) - return cmd -} - -func installGlooE(opts *options.Options) error { - if !opts.Install.DryRun { - fmt.Printf("Starting Gloo Enterprise installation...\n") - } - spec, err := GetEnterpriseInstallSpec(opts) - if err != nil { - return err - } - - kubeInstallClient := NamespacedGlooKubeInstallClient{ - Namespace: opts.Install.Namespace, - Delegate: &DefaultGlooKubeInstallClient{}, - Executor: install.Kubectl, - } - if err := InstallGloo(opts, *spec, &kubeInstallClient); err != nil { - fmt.Fprintf(os.Stderr, "\nGloo failed to install! Detailed logs available at %s.\n", cliutil.GetLogsPath()) - return err - } - if !opts.Install.DryRun { - fmt.Printf("\nGloo Enterprise was successfully installed!\n") - } - return nil -} -// enterprise -func GetEnterpriseInstallSpec(opts *options.Options) (*GlooInstallSpec, error) { - glooEVersion := version.EnterpriseTag - - // Get location of Gloo helm chart - helmChartArchiveUri := fmt.Sprintf(GlooEHelmRepoTemplate, glooEVersion) - if helmChartOverride := opts.Install.HelmChartOverride; helmChartOverride != "" { - helmChartArchiveUri = helmChartOverride - } + extraValues := map[string]interface{}{ + "license_key": opts.Install.LicenseKey, + } - extraValues := map[string]interface{}{ - "license_key": opts.Install.LicenseKey, - } + if err := NewInstaller(DefaultHelmClient()).Install(&InstallerConfig{ + InstallCliArgs: &opts.Install, + ExtraValues: extraValues, + Enterprise: true, + Verbose: opts.Top.Verbose, + }); err != nil { + return errors.Wrapf(err, "installing Gloo Enterprise in gateway mode") + } - if opts.Install.Upgrade { - extraValues["gloo"] = map[string]interface{}{ - "gateway": map[string]interface{}{ - "upgrade": "true", - }, - } - } else { - extraValues["gloo"] = map[string]interface{}{ - "namespace": map[string]interface{}{ - "create": "true", - }, - } + return nil + }, } - return &GlooInstallSpec{ - HelmArchiveUri: helmChartArchiveUri, - ProductName: "glooe", - ValueFileName: "", - ExtraValues: extraValues, - ExcludeResources: pvcExists(opts.Install.Namespace), - UserValueFileNames: opts.Install.HelmChartValueFileNames, - }, nil -} - -const PersistentVolumeClaim = "PersistentVolumeClaim" - -func pvcExists(namespace string) install.ResourceMatcherFunc { - return func(resource install.ResourceType) (bool, error) { - kubeClient, err := helpers.KubeClient() - if err != nil { - return false, err - } - - // If this is a PVC, check if it already exists. If so, exclude this resource from the manifest. - // We don't want to overwrite existing PVCs. - if resource.TypeMeta.Kind == PersistentVolumeClaim { - - _, err := kubeClient.CoreV1().PersistentVolumeClaims(namespace).Get(resource.Metadata.Name, v1.GetOptions{}) - if err != nil { - if !kubeerrors.IsNotFound(err) { - return false, errors.Wrapf(err, "retrieving %s: %s.%s", PersistentVolumeClaim, namespace, resource.Metadata.Name) - } - } else { - // The PVC exists, exclude it from manifest - return true, nil - } - } - return false, nil - } + pFlags := cmd.PersistentFlags() + flagutils.AddEnterpriseInstallFlags(pFlags, &opts.Install) + return cmd } diff --git a/projects/gloo/cli/pkg/cmd/install/errors.go b/projects/gloo/cli/pkg/cmd/install/errors.go index a9ae1f31411..73a87bfa823 100644 --- a/projects/gloo/cli/pkg/cmd/install/errors.go +++ b/projects/gloo/cli/pkg/cmd/install/errors.go @@ -3,15 +3,9 @@ package install import "github.com/solo-io/go-utils/errors" var ( - FailedToFindLabel = func(err error) error { - return errors.Wrapf(err, "kubectl failed to pull %s label from gloo pod", installationIdLabel) - } - LabelNotSet = errors.Errorf("%s label has no value on gloo pod", installationIdLabel) - CantUninstallWithoutInstallId = func(err error) error { - return errors.Wrapf(err, `Could not find installation ID in 'gloo' pod labels. Use --force to uninstall anyway. -Note that using --force may delete cluster-scoped resources belonging to some other installation of Gloo... -This error may mean that you are trying to use glooctl >=0.20.14 to uninstall a version of Gloo <0.20.13 (or Enterprise Gloo <0.20.9). -Make sure you are on open source Gloo >=0.20.14 or Enterprise Gloo >=0.20.9. -`) + GlooAlreadyInstalled = func(namespace string) error { + return errors.Errorf("Gloo has already been installed to namespace %s", namespace) } + NoReleaseForCRDs = errors.New("Could not find a release from which to pull CRDs") + MultipleReleasesForCRDs = errors.New("Found multiple releases from which to pull CRDs") ) diff --git a/projects/gloo/cli/pkg/cmd/install/extra_values.go b/projects/gloo/cli/pkg/cmd/install/extra_values.go new file mode 100644 index 00000000000..6608af6bbfe --- /dev/null +++ b/projects/gloo/cli/pkg/cmd/install/extra_values.go @@ -0,0 +1,34 @@ +package install + +import ( + "bytes" + "text/template" +) + +const ( + ingressValues = ` +gateway: + enabled: false +ingress: + enabled: true +` + knativeValuesTemplate = ` +gateway: + enabled: false +settings: + integrations: + knative: + enabled: true + version: {{ . }} +` +) + +func RenderKnativeValues(version string) (string, error) { + parsedTemplate := template.Must(template.New("knativeValues").Parse(knativeValuesTemplate)) + + var b bytes.Buffer + if err := parsedTemplate.Execute(&b, version); err != nil { + return "", err + } + return b.String(), nil +} diff --git a/projects/gloo/cli/pkg/cmd/install/gateway.go b/projects/gloo/cli/pkg/cmd/install/gateway.go index 21101af7a6e..1457bf0f8db 100644 --- a/projects/gloo/cli/pkg/cmd/install/gateway.go +++ b/projects/gloo/cli/pkg/cmd/install/gateway.go @@ -2,8 +2,6 @@ package install import ( "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/flagutils" "github.com/solo-io/go-utils/errors" "github.com/spf13/cobra" _ "k8s.io/client-go/plugin/pkg/client/auth" @@ -12,20 +10,23 @@ import ( func gatewayCmd(opts *options.Options) *cobra.Command { cmd := &cobra.Command{ Use: "gateway", - Short: "install the Gloo Gateway on kubernetes", + Short: "install the Gloo Gateway on Kubernetes", Long: "requires kubectl to be installed", PreRun: setVerboseMode(opts), + RunE: func(cmd *cobra.Command, args []string) error { - if err := installGloo(opts, constants.GatewayValuesFileName); err != nil { + helmClient := DefaultHelmClient() + installer := NewInstaller(helmClient) + if err := installer.Install(&InstallerConfig{ + InstallCliArgs: &opts.Install, + Verbose: opts.Top.Verbose, + }); err != nil { return errors.Wrapf(err, "installing gloo in gateway mode") } return nil }, } - pflags := cmd.PersistentFlags() - flagutils.AddInstallFlags(pflags, &opts.Install) - cmd.AddCommand(enterpriseCmd(opts)) return cmd diff --git a/projects/gloo/cli/pkg/cmd/install/helm_client.go b/projects/gloo/cli/pkg/cmd/install/helm_client.go new file mode 100644 index 00000000000..491543689a1 --- /dev/null +++ b/projects/gloo/cli/pkg/cmd/install/helm_client.go @@ -0,0 +1,188 @@ +package install + +import ( + "io/ioutil" + "os" + + "github.com/solo-io/gloo/pkg/cliutil" + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/chart" + "helm.sh/helm/v3/pkg/chart/loader" + "helm.sh/helm/v3/pkg/cli" + "helm.sh/helm/v3/pkg/release" +) + +const tempChartFilePermissions = 0644 + +var verbose bool + +func setVerbose(b bool) { + verbose = b +} + +//go:generate mockgen -destination mocks/mock_helm_client.go -package mocks github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install HelmClient + +// This interface implements the Helm CLI actions. The implementation relies on the Helm 3 libraries. +type HelmClient interface { + // Prepare an installation object that can then be .Run() with a chart object + NewInstall(namespace, releaseName string, dryRun bool) (HelmInstallation, *cli.EnvSettings, error) + + // Prepare an un-installation object that can then be .Run() with a release name + NewUninstall(namespace string) (HelmUninstallation, error) + + // List the already-existing releases in the given namespace + ReleaseList(namespace string) (HelmReleaseListRunner, error) + + // Returns the Helm chart archive located at the given URI (can be either an http(s) address or a file path) + DownloadChart(chartArchiveUri string) (*chart.Chart, error) + + // Returns true if the release with the given name exists in the given namespace + ReleaseExists(namespace, releaseName string) (releaseExists bool, err error) +} + +// an interface around Helm's action.Install struct +//go:generate mockgen -destination mocks/mock_helm_installation.go -package mocks github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install HelmInstallation +type HelmInstallation interface { + Run(chrt *chart.Chart, vals map[string]interface{}) (*release.Release, error) +} + +// an interface around Helm's action.Uninstall struct +//go:generate mockgen -destination mocks/mock_helm_uninstallation.go -package mocks github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install HelmUninstallation +type HelmUninstallation interface { + Run(name string) (*release.UninstallReleaseResponse, error) +} + +var _ HelmInstallation = &action.Install{} +var _ HelmUninstallation = &action.Uninstall{} + +// an interface around Helm's action.List struct +//go:generate mockgen -destination mocks/mock_helm_release_list.go -package mocks github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install HelmReleaseListRunner +type HelmReleaseListRunner interface { + Run() ([]*release.Release, error) + SetFilter(filter string) +} + +// a HelmClient that talks to the kube api server and creates resources +func DefaultHelmClient() HelmClient { + return &defaultHelmClient{} +} + +type defaultHelmClient struct { +} + +func (d *defaultHelmClient) NewInstall(namespace, releaseName string, dryRun bool) (HelmInstallation, *cli.EnvSettings, error) { + actionConfig, settings, err := newActionConfig(namespace) + if err != nil { + return nil, nil, err + } + settings.Debug = verbose + + client := action.NewInstall(actionConfig) + client.ReleaseName = releaseName + client.Namespace = namespace + client.DryRun = dryRun + + // If this is a dry run, we don't want to query the API server. + // In the future we can make this configurable to emulate the `helm template --validate` behavior. + client.ClientOnly = dryRun + + return client, settings, nil +} + +func (d *defaultHelmClient) NewUninstall(namespace string) (HelmUninstallation, error) { + actionConfig, _, err := newActionConfig(namespace) + if err != nil { + return nil, err + } + return action.NewUninstall(actionConfig), nil +} + +type helmReleaseListRunner struct { + list *action.List +} + +func (h *helmReleaseListRunner) Run() ([]*release.Release, error) { + return h.list.Run() +} + +func (h *helmReleaseListRunner) SetFilter(filter string) { + h.list.Filter = filter +} + +func (d *defaultHelmClient) ReleaseList(namespace string) (HelmReleaseListRunner, error) { + actionConfig, _, err := newActionConfig(namespace) + if err != nil { + return nil, err + } + return &helmReleaseListRunner{ + list: action.NewList(actionConfig), + }, nil +} + +func (d *defaultHelmClient) DownloadChart(chartArchiveUri string) (*chart.Chart, error) { + + // 1. Get a reader to the chart file (remote URL or local file path) + chartFileReader, err := cliutil.GetResource(chartArchiveUri) + if err != nil { + return nil, err + } + defer func() { _ = chartFileReader.Close() }() + + // 2. Write chart to a temporary file + chartBytes, err := ioutil.ReadAll(chartFileReader) + if err != nil { + return nil, err + } + + chartFile, err := ioutil.TempFile("", "gloo-helm-chart") + if err != nil { + return nil, err + } + charFilePath := chartFile.Name() + defer func() { _ = os.RemoveAll(charFilePath) }() + + if err := ioutil.WriteFile(charFilePath, chartBytes, tempChartFilePermissions); err != nil { + return nil, err + } + + // 3. Load the chart file + chartObj, err := loader.Load(charFilePath) + if err != nil { + return nil, err + } + + return chartObj, nil +} + +func (d *defaultHelmClient) ReleaseExists(namespace, releaseName string) (releaseExists bool, err error) { + list, err := d.ReleaseList(namespace) + if err != nil { + return false, err + } + list.SetFilter(releaseName) + + releases, err := list.Run() + if err != nil { + return false, err + } + + for _, r := range releases { + releaseExists = releaseExists || r.Name == releaseName + } + + return releaseExists, nil +} + +func noOpDebugLog(_ string, _ ...interface{}) {} + +// Returns an action configuration that can be used to create Helm actions and the Helm env settings. +// We currently get the Helm storage driver from the standard HELM_DRIVER env (defaults to 'secret'). +func newActionConfig(namespace string) (*action.Configuration, *cli.EnvSettings, error) { + settings := cli.New() + actionConfig := new(action.Configuration) + + if err := actionConfig.Init(settings.RESTClientGetter(), namespace, os.Getenv("HELM_DRIVER"), noOpDebugLog); err != nil { + return nil, nil, err + } + return actionConfig, settings, nil +} diff --git a/projects/gloo/cli/pkg/cmd/install/ingress.go b/projects/gloo/cli/pkg/cmd/install/ingress.go index 8d8ec8bbe9c..7db79956f00 100644 --- a/projects/gloo/cli/pkg/cmd/install/ingress.go +++ b/projects/gloo/cli/pkg/cmd/install/ingress.go @@ -1,9 +1,8 @@ package install import ( - "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/flagutils" "github.com/solo-io/go-utils/errors" + "helm.sh/helm/v3/pkg/chartutil" _ "k8s.io/client-go/plugin/pkg/client/auth" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" @@ -13,17 +12,26 @@ import ( func ingressCmd(opts *options.Options) *cobra.Command { cmd := &cobra.Command{ Use: "ingress", - Short: "install the Gloo Ingress Controller on kubernetes", + Short: "install the Gloo Ingress Controller on Kubernetes", Long: "requires kubectl to be installed", PreRun: setVerboseMode(opts), RunE: func(cmd *cobra.Command, args []string) error { - if err := installGloo(opts, constants.IngressValuesFileName); err != nil { + + ingressOverrides, err := chartutil.ReadValues([]byte(ingressValues)) + if err != nil { + return errors.Wrapf(err, "parsing override values for ingress mode") + } + + if err := NewInstaller(DefaultHelmClient()).Install(&InstallerConfig{ + InstallCliArgs: &opts.Install, + ExtraValues: ingressOverrides, + Verbose: opts.Top.Verbose, + }); err != nil { return errors.Wrapf(err, "installing gloo in ingress mode") } + return nil }, } - pflags := cmd.PersistentFlags() - flagutils.AddInstallFlags(pflags, &opts.Install) return cmd } diff --git a/projects/gloo/cli/pkg/cmd/install/install_suite_test.go b/projects/gloo/cli/pkg/cmd/install/install_suite_test.go index 1b1ac7ada8c..3316b7bade1 100644 --- a/projects/gloo/cli/pkg/cmd/install/install_suite_test.go +++ b/projects/gloo/cli/pkg/cmd/install/install_suite_test.go @@ -3,14 +3,13 @@ package install_test import ( "os" "path/filepath" - "testing" - - "github.com/solo-io/gloo/projects/gloo/cli/pkg/testutils" - gotestutils "github.com/solo-io/go-utils/testutils" + "testing" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/testutils" + gotestutils "github.com/solo-io/go-utils/testutils" ) func TestInstall(t *testing.T) { @@ -49,7 +48,7 @@ var _ = BeforeSuite(func() { Expect(err).NotTo(HaveOccurred()) _, err = f.WriteString(` settings: - writeNamespace: test-namespace`) + writeNamespace: test-namespace`) Expect(err).NotTo(HaveOccurred()) f.Close() @@ -57,7 +56,7 @@ settings: Expect(err).NotTo(HaveOccurred()) _, err = f2.WriteString(` settings: - writeNamespace: test-namespace-2`) + writeNamespace: test-namespace-2`) Expect(err).NotTo(HaveOccurred()) f2.Close() }) diff --git a/projects/gloo/cli/pkg/cmd/install/install_test.go b/projects/gloo/cli/pkg/cmd/install/install_test.go index 184797f0fff..49f487be437 100644 --- a/projects/gloo/cli/pkg/cmd/install/install_test.go +++ b/projects/gloo/cli/pkg/cmd/install/install_test.go @@ -67,7 +67,7 @@ var _ = Describe("Install", func() { It("should error when not providing valid file", func() { _, err := testutils.GlooctlOut("install gateway --file foo.tgz") Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("installing gloo in gateway mode: retrieving gloo helm chart archive: opening file")) + Expect(err.Error()).To(ContainSubstring("no such file or directory")) }) It("should not error when providing the admin console flag", func() { @@ -75,7 +75,13 @@ var _ = Describe("Install", func() { // into the glooctl binary at build time out, err := exec.RunCommandOutput(RootDir, true, filepath.Join("_output", "glooctl"), "install", "gateway", "--dry-run", "--with-admin-console") Expect(err).NotTo(HaveOccurred()) - Expect(out).To(ContainSubstring("kind: Namespace")) + Expect(out).NotTo(BeEmpty()) + }) + + It("should not error when providing a new release-name flag value", func() { + out, err := testutils.GlooctlOut(fmt.Sprintf("install gateway --file %s --release-name test --dry-run", file)) + Expect(err).NotTo(HaveOccurred()) + Expect(out).NotTo(BeEmpty()) }) }) diff --git a/projects/gloo/cli/pkg/cmd/install/installer.go b/projects/gloo/cli/pkg/cmd/install/installer.go index 50809192f10..2bc9429a641 100644 --- a/projects/gloo/cli/pkg/cmd/install/installer.go +++ b/projects/gloo/cli/pkg/cmd/install/installer.go @@ -1,237 +1,209 @@ package install import ( - "bytes" - "context" + "encoding/json" "fmt" "io" + "os" "path" "strings" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/helpers" + "github.com/solo-io/gloo/pkg/cliutil/helm" - "github.com/pkg/errors" - "github.com/solo-io/gloo/pkg/cliutil/install" + "github.com/solo-io/gloo/pkg/cliutil" + "github.com/solo-io/gloo/pkg/version" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" - "github.com/solo-io/go-utils/contextutils" - "github.com/solo-io/go-utils/kubeutils" - "go.uber.org/zap" - "k8s.io/helm/pkg/chartutil" - "k8s.io/helm/pkg/manifest" - "k8s.io/helm/pkg/proto/hapi/chart" - "k8s.io/helm/pkg/renderutil" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" + "github.com/solo-io/go-utils/errors" + "helm.sh/helm/v3/pkg/chartutil" + "helm.sh/helm/v3/pkg/cli/values" + "helm.sh/helm/v3/pkg/getter" + "helm.sh/helm/v3/pkg/release" + _ "k8s.io/client-go/plugin/pkg/client/auth" + "sigs.k8s.io/yaml" ) -type GlooKubeInstallClient interface { - KubectlApply(manifest []byte) error - WaitForCrdsToBeRegistered(ctx context.Context, crds []string) error +type Installer interface { + Install(installerConfig *InstallerConfig) error } -type DefaultGlooKubeInstallClient struct{} - -func (i *DefaultGlooKubeInstallClient) KubectlApply(manifest []byte) error { - return install.KubectlApply(manifest) -} - -func (i *DefaultGlooKubeInstallClient) WaitForCrdsToBeRegistered(ctx context.Context, crds []string) error { - return waitForCrdsToBeRegistered(ctx, crds) +type InstallerConfig struct { + InstallCliArgs *options.Install + ExtraValues map[string]interface{} + Enterprise bool + Verbose bool } -type NamespacedGlooKubeInstallClient struct { - Namespace string - Delegate GlooKubeInstallClient - Executor func(stdin io.Reader, args ...string) error +func NewInstaller(helmClient HelmClient) Installer { + return NewInstallerWithWriter(helmClient, os.Stdout) } -func (i *NamespacedGlooKubeInstallClient) KubectlApply(manifest []byte) error { - if i.Namespace == "" { - return i.Delegate.KubectlApply(manifest) +// visible for testing +func NewInstallerWithWriter(helmClient HelmClient, outputWriter io.Writer) Installer { + return &installer{ + helmClient: helmClient, + dryRunOutputWriter: outputWriter, } - return i.Executor(bytes.NewBuffer(manifest), "apply", "-n", i.Namespace, "-f", "-") -} - -func (i *NamespacedGlooKubeInstallClient) WaitForCrdsToBeRegistered(ctx context.Context, crds []string) error { - return i.Delegate.WaitForCrdsToBeRegistered(ctx, crds) } -func waitForCrdsToBeRegistered(ctx context.Context, crds []string) error { - apiExts := helpers.MustApiExtsClient() - logger := contextutils.LoggerFrom(ctx) - for _, crdName := range crds { - logger.Debugw("waiting for crd to be registered", zap.String("crd", crdName)) - if err := kubeutils.WaitForCrdActive(apiExts, crdName); err != nil { - return errors.Wrapf(err, "waiting for crd %v to become registered", crdName) +func (i *installer) Install(installerConfig *InstallerConfig) error { + namespace := installerConfig.InstallCliArgs.Namespace + releaseName := installerConfig.InstallCliArgs.HelmReleaseName + if !installerConfig.InstallCliArgs.DryRun { + if releaseExists, err := i.helmClient.ReleaseExists(namespace, releaseName); err != nil { + return err + } else if releaseExists { + return GlooAlreadyInstalled(namespace) } } - return nil -} - -type ManifestInstaller interface { - InstallManifest(manifest []byte) error - InstallCrds(ctx context.Context, crdNames []string, manifest []byte) error -} + preInstallMessage(installerConfig.InstallCliArgs, installerConfig.Enterprise) -type GlooKubeManifestInstaller struct { - GlooKubeInstallClient GlooKubeInstallClient -} + helmInstall, helmEnv, err := i.helmClient.NewInstall(namespace, releaseName, installerConfig.InstallCliArgs.DryRun) + if err != nil { + return err + } -func (i *GlooKubeManifestInstaller) InstallManifest(manifest []byte) error { - if install.IsEmptyManifest(string(manifest)) { - return nil + chartUri, err := getChartUri(installerConfig.InstallCliArgs.HelmChartOverride, installerConfig.InstallCliArgs.WithUi, installerConfig.Enterprise) + if err != nil { + return err } - if err := i.GlooKubeInstallClient.KubectlApply(manifest); err != nil { - return errors.Wrapf(err, "running kubectl apply on manifest") + if installerConfig.Verbose { + fmt.Printf("Looking for chart at %s\n", chartUri) } - return nil -} -func (i *GlooKubeManifestInstaller) InstallCrds(ctx context.Context, crdNames []string, manifest []byte) error { - if err := i.InstallManifest(manifest); err != nil { + chartObj, err := i.helmClient.DownloadChart(chartUri) + if err != nil { return err } - if err := i.GlooKubeInstallClient.WaitForCrdsToBeRegistered(ctx, crdNames); err != nil { - return errors.Wrapf(err, "waiting for crds to be registered") - } - return nil -} -type DryRunManifestInstaller struct{} + // Merge values provided via the '--values' flag + valueOpts := &values.Options{ + ValueFiles: installerConfig.InstallCliArgs.HelmChartValueFileNames, + } + cliValues, err := valueOpts.MergeValues(getter.All(helmEnv)) + if err != nil { + return err + } -func (i *DryRunManifestInstaller) InstallManifest(manifest []byte) error { - manifestString := string(manifest) - if install.IsEmptyManifest(manifestString) { - return nil + // Merge the CLI flag values into the extra values, giving the latter higher precedence. + // (The first argument to CoalesceTables has higher priority) + completeValues := chartutil.CoalesceTables(installerConfig.ExtraValues, cliValues) + if installerConfig.Verbose { + b, err := json.Marshal(completeValues) + if err != nil { + fmt.Printf("error: %v\n", err) + } + y, err := yaml.JSONToYAML(b) + if err != nil { + fmt.Printf("error: %v\n", err) + } + fmt.Printf("Installing the %s chart with the following value overrides:\n%v\n", chartObj.Metadata.Name, y) } - fmt.Printf("%s", manifestString) - // For safety, print a YAML separator so multiple invocations of this function will produce valid output - fmt.Println("\n---") - return nil -} -func (i *DryRunManifestInstaller) InstallCrds(ctx context.Context, crdNames []string, manifest []byte) error { - return i.InstallManifest(manifest) -} + rel, err := helmInstall.Run(chartObj, completeValues) + if err != nil { + // TODO: verify whether we actually log something there after these changes + _, _ = fmt.Fprintf(os.Stderr, "\nGloo failed to install! Detailed logs available at %s.\n", cliutil.GetLogsPath()) + return err + } + if installerConfig.Verbose { + fmt.Printf("Successfully ran helm install with release %s\n", releaseName) + } -type KnativeInstallStatus struct { - isInstalled bool - isOurs bool -} + if installerConfig.InstallCliArgs.DryRun { + if err := i.printReleaseManifest(rel); err != nil { + return err + } + } -type GlooStagedInstaller interface { - DoCrdInstall() error - DoPreInstall() error - DoInstall() error -} + postInstallMessage(installerConfig.InstallCliArgs, installerConfig.Enterprise) -type DefaultGlooStagedInstaller struct { - chart *chart.Chart - values *chart.Config - renderOpts renderutil.Options - excludeResources install.ResourceMatcherFunc - manifestInstaller ManifestInstaller - dryRun bool - ctx context.Context + return nil } -func NewGlooStagedInstaller(opts *options.Options, spec GlooInstallSpec, client GlooKubeInstallClient) (GlooStagedInstaller, error) { - if path.Ext(spec.HelmArchiveUri) != ".tgz" && !strings.HasSuffix(spec.HelmArchiveUri, ".tar.gz") { - return nil, errors.Errorf("unsupported file extension for Helm chart URI: [%s]. Extension must either be .tgz or .tar.gz", spec.HelmArchiveUri) - } - - chart, err := install.GetHelmArchive(spec.HelmArchiveUri) - if err != nil { - return nil, errors.Wrapf(err, "retrieving gloo helm chart archive") +func (i *installer) printReleaseManifest(release *release.Release) error { + // Print CRDs + for _, crdFile := range release.Chart.CRDs() { + _, _ = fmt.Fprintf(i.dryRunOutputWriter, "%s", string(crdFile.Data)) + _, _ = fmt.Fprintln(i.dryRunOutputWriter, "---") } - values, err := install.GetValuesFromFileIncludingExtra(chart, spec.ValueFileName, spec.UserValueFileNames, spec.ExtraValues, spec.ValueCallbacks...) + // Print hook resources + nonCleanupHooks, err := helm.GetNonCleanupHooks(release.Hooks) if err != nil { - return nil, errors.Wrapf(err, "retrieving value file: %s", spec.ValueFileName) + return err } - - // These are the .Release.* variables used during rendering - renderOpts := renderutil.Options{ - ReleaseOptions: chartutil.ReleaseOptions{ - Namespace: opts.Install.Namespace, - Name: spec.ProductName, - }, + for _, hook := range nonCleanupHooks { + _, _ = fmt.Fprintln(i.dryRunOutputWriter, hook.Manifest) + _, _ = fmt.Fprintln(i.dryRunOutputWriter, "---") } - var manifestInstaller ManifestInstaller - if opts.Install.DryRun { - manifestInstaller = &DryRunManifestInstaller{} - } else { - manifestInstaller = &GlooKubeManifestInstaller{ - GlooKubeInstallClient: client, - } - } + // Print the actual release resources + _, _ = fmt.Fprintf(i.dryRunOutputWriter, "%s", release.Manifest) - return &DefaultGlooStagedInstaller{ - chart: chart, - values: values, - renderOpts: renderOpts, - excludeResources: spec.ExcludeResources, - manifestInstaller: manifestInstaller, - dryRun: opts.Install.DryRun, - ctx: opts.Top.Ctx, - }, nil + // For safety, print a YAML separator so multiple invocations of this function will produce valid output + _, _ = fmt.Fprintln(i.dryRunOutputWriter, "---") + return nil } -func (i *DefaultGlooStagedInstaller) DoCrdInstall() error { +// The resulting URI can be either a URL or a local file path. +func getChartUri(chartOverride string, withUi bool, enterprise bool) (string, error) { + var helmChartArchiveUri string - // Keep only CRDs and collect the names - var crdNames []string - excludeNonCrdsAndCollectCrdNames := func(input []manifest.Manifest) ([]manifest.Manifest, error) { - manifests, resourceNames, err := install.ExcludeNonCrds(input) - crdNames = resourceNames - return manifests, err + if enterprise { + helmChartArchiveUri = fmt.Sprintf(GlooEHelmRepoTemplate, version.EnterpriseTag) + } else if withUi { + helmChartArchiveUri = fmt.Sprintf(constants.GlooWithUiHelmRepoTemplate, version.EnterpriseTag) + } else { + glooOsVersion, err := getGlooVersion(chartOverride) + if err != nil { + return "", err + } + helmChartArchiveUri = fmt.Sprintf(constants.GlooHelmRepoTemplate, glooOsVersion) } - // Render and install CRD manifests - crdManifestBytes, err := install.RenderChart(i.chart, i.values, i.renderOpts, - install.ExcludeNotes, - excludeNonCrdsAndCollectCrdNames, - install.ExcludeEmptyManifests) - if err != nil { - return errors.Wrapf(err, "rendering crd manifests") + if chartOverride != "" { + helmChartArchiveUri = chartOverride } - if !i.dryRun { - fmt.Printf("Installing CRDs...\n") + if path.Ext(helmChartArchiveUri) != ".tgz" && !strings.HasSuffix(helmChartArchiveUri, ".tar.gz") { + return "", errors.Errorf("unsupported file extension for Helm chart URI: [%s]. Extension must either be .tgz or .tar.gz", helmChartArchiveUri) } + return helmChartArchiveUri, nil +} - return i.manifestInstaller.InstallCrds(i.ctx, crdNames, crdManifestBytes) +func getGlooVersion(chartOverride string) (string, error) { + if !version.IsReleaseVersion() && chartOverride == "" { + return "", errors.Errorf("you must provide a Gloo Helm chart URI via the 'file' option " + + "when running an unreleased version of glooctl") + } + return version.Version, nil } -func (i *DefaultGlooStagedInstaller) DoPreInstall() error { - // Render and install Gloo manifest - manifestBytes, err := install.RenderChart(i.chart, i.values, i.renderOpts, - install.ExcludeNotes, - install.IncludeOnlyPreInstall, - install.ExcludeEmptyManifests, - install.ExcludeMatchingResources(i.excludeResources)) - if err != nil { - return err +func preInstallMessage(installOpts *options.Install, enterprise bool) { + if installOpts.DryRun { + return } - if !i.dryRun { - fmt.Printf("Preparing namespace and other pre-install tasks...\n") + if enterprise { + fmt.Println("Starting Gloo Enterprise installation...") + } else { + fmt.Println("Starting Gloo installation...") } - return i.manifestInstaller.InstallManifest(manifestBytes) } - -func (i *DefaultGlooStagedInstaller) DoInstall() error { - // Render and install Gloo manifest - manifestBytes, err := install.RenderChart(i.chart, i.values, i.renderOpts, - install.ExcludeNotes, - install.ExcludePreInstall, - install.ExcludeCrds, - install.ExcludeEmptyManifests, - install.ExcludeMatchingResources(i.excludeResources)) - if err != nil { - return err +func postInstallMessage(installOpts *options.Install, enterprise bool) { + if installOpts.DryRun { + return } - if !i.dryRun { - fmt.Printf("Installing...\n") + if enterprise { + fmt.Println("Gloo Enterprise was successfully installed!") + } else { + fmt.Println("Gloo was successfully installed!") } - return i.manifestInstaller.InstallManifest(manifestBytes) + +} + +type installer struct { + helmClient HelmClient + dryRunOutputWriter io.Writer } diff --git a/projects/gloo/cli/pkg/cmd/install/installer_test.go b/projects/gloo/cli/pkg/cmd/install/installer_test.go index 316a538cda7..3294850d6c1 100644 --- a/projects/gloo/cli/pkg/cmd/install/installer_test.go +++ b/projects/gloo/cli/pkg/cmd/install/installer_test.go @@ -1,369 +1,182 @@ package install_test import ( - "context" - "fmt" - "io" - "os/exec" + "bytes" + "github.com/golang/mock/gomock" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - install2 "github.com/solo-io/gloo/pkg/cliutil/install" + "github.com/solo-io/gloo/pkg/version" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install/mocks" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" + "github.com/solo-io/gloo/projects/gloo/pkg/defaults" + helmchart "helm.sh/helm/v3/pkg/chart" + "helm.sh/helm/v3/pkg/cli" + "helm.sh/helm/v3/pkg/release" ) -type MockInstallClient struct { - expectedCrds []string - applied bool - waited bool - resources []install2.ResourceType - knativeInstalled bool - knativeOurs bool -} - -func (i *MockInstallClient) KubectlApply(manifest []byte) error { - Expect(i.applied).To(BeFalse()) - i.applied = true - resources, err := install2.GetResources(string(manifest)) - Expect(err).NotTo(HaveOccurred()) - i.resources = resources - return nil -} - -func (i *MockInstallClient) WaitForCrdsToBeRegistered(_ context.Context, crds []string) error { - Expect(i.waited).To(BeFalse()) - i.waited = true - Expect(crds).To(ConsistOf(i.expectedCrds)) - return nil -} - -func (i *MockInstallClient) CheckKnativeInstallation() (bool, bool, error) { - return i.knativeInstalled, i.knativeOurs, nil -} - var _ = Describe("Install", func() { - var ( - installer install.GlooStagedInstaller - opts options.Options - validator MockInstallClient - ) - - BeforeEach(func() { - opts.Install.Namespace = "gloo-system" - opts.Install.HelmChartOverride = file - }) - - expectKinds := func(resources []install2.ResourceType, kinds []string) { - for _, resource := range resources { - ExpectWithOffset(1, kinds).To(ContainElement(resource.Kind)) - } - } - - expectNames := func(resources []install2.ResourceType, names []string) { - for _, resource := range resources { - ExpectWithOffset(1, names).To(ContainElement(resource.Metadata.Name)) - } - } - - expectLabels := func(resources []install2.ResourceType, labels map[string]string) { - for _, resource := range resources { - actualLabels := resource.Metadata.Labels - for k, v := range labels { - val, ok := actualLabels[k] - ExpectWithOffset(1, ok).To(BeTrue()) - ExpectWithOffset(1, v).To(BeEquivalentTo(val)) - } + mockHelmClient *mocks.MockHelmClient + mockHelmInstallation *mocks.MockHelmInstallation + ctrl *gomock.Controller + + glooOsVersion = "v1.0.0" + glooOsChartUri = "https://storage.googleapis.com/solo-public-helm/charts/gloo-v1.0.0.tgz" + testCrdContent = "test-crd-content" + testHookContent = ` +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: gloo-gateway-secret-create-vwc-update-gloo-system + labels: + app: gloo + gloo: rbac + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "5" # must be executed before cert-gen job +subjects: +- kind: ServiceAccount + name: gateway-certgen + namespace: gloo-system +roleRef: + kind: ClusterRole + name: gloo-gateway-secret-create-vwc-update-gloo-system + apiGroup: rbac.authorization.k8s.io +` + testCleanupHook = ` +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: gloo-gateway-secret-create-vwc-update-gloo-system + labels: + app: gloo + gloo: rbac + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "` + constants.HookCleanupResourceAnnotation + `": "true" # Used internally to mark "hook cleanup" resources +rules: +- apiGroups: [""] + resources: ["secrets"] + verbs: ["create", "get", "update"] +- apiGroups: ["admissionregistration.k8s.io"] + resources: ["validatingwebhookconfigurations"] + verbs: ["get", "update"] +` + + chart = &helmchart.Chart{ + Metadata: &helmchart.Metadata{ + Name: "gloo-installer-test-chart", + }, + Files: []*helmchart.File{{ + Name: "crds/crdA.yaml", + Data: []byte(testCrdContent), + }}, } - } - withSettings := func(kinds []string) []string { - // default knative values create Settings - kindsWithSettings := make([]string, len(kinds)) - for _, kind := range kinds { - kindsWithSettings = append(kindsWithSettings, kind) + helmRelease = &release.Release{ + Chart: chart, + Hooks: []*release.Hook{ + { + Manifest: testHookContent, + }, + { + Manifest: testCleanupHook, + }, + }, + Namespace: defaults.GlooSystem, } - kindsWithSettings = append(kindsWithSettings, "Settings") - - return kindsWithSettings - } - - Context("Gateway with default values", func() { - BeforeEach(func() { - spec, err := install.GetInstallSpec(&opts, constants.GatewayValuesFileName) - Expect(err).NotTo(HaveOccurred()) - validator = MockInstallClient{ - expectedCrds: install.GlooCrdNames, - } - installer, err = install.NewGlooStagedInstaller(&opts, *spec, &validator) - Expect(err).NotTo(HaveOccurred()) - }) - - It("installs expected crds for gloo", func() { - err := installer.DoCrdInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeTrue()) - expectKinds(validator.resources, []string{"CustomResourceDefinition"}) - expectNames(validator.resources, install.GlooCrdNames) - }) - - It("does nothing on preinstall", func() { - err := installer.DoPreInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, install.GlooPreInstallKinds) - expectLabels(validator.resources, install.ExpectedLabels) - }) + ) - It("installs expected kinds for gloo", func() { - err := installer.DoInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, install.GlooInstallKinds) - expectLabels(validator.resources, install.ExpectedLabels) - }) + BeforeEach(func() { + version.Version = glooOsVersion + ctrl = gomock.NewController(GinkgoT()) + mockHelmClient = mocks.NewMockHelmClient(ctrl) + mockHelmInstallation = mocks.NewMockHelmInstallation(ctrl) }) - Context("Gateway with default values and upgrade option", func() { - BeforeEach(func() { - opts.Install.Upgrade = true - spec, err := install.GetInstallSpec(&opts, constants.GatewayValuesFileName) - Expect(err).NotTo(HaveOccurred()) - validator = MockInstallClient{ - expectedCrds: install.GlooCrdNames, - } - installer, err = install.NewGlooStagedInstaller(&opts, *spec, &validator) - Expect(err).NotTo(HaveOccurred()) - }) - - It("installs expected crds for gloo", func() { - err := installer.DoCrdInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeTrue()) - expectKinds(validator.resources, []string{"CustomResourceDefinition"}) - expectNames(validator.resources, install.GlooCrdNames) - }) - - It("does nothing on preinstall", func() { - err := installer.DoPreInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, install.GlooPreInstallKinds) - expectLabels(validator.resources, install.ExpectedLabels) - }) - - It("installs expected kinds for gloo", func() { - err := installer.DoInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, install.GlooGatewayUpgradeKinds) - expectLabels(validator.resources, install.ExpectedLabels) - }) - + AfterEach(func() { + version.Version = version.UndefinedVersion + ctrl.Finish() }) - Context("Ingress with default values", func() { - BeforeEach(func() { - spec, err := install.GetInstallSpec(&opts, constants.IngressValuesFileName) - Expect(err).NotTo(HaveOccurred()) - validator = MockInstallClient{ - expectedCrds: install.GlooCrdNames, - } - installer, err = install.NewGlooStagedInstaller(&opts, *spec, &validator) - Expect(err).NotTo(HaveOccurred()) - }) - - It("installs expected crds for gloo", func() { - err := installer.DoCrdInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeTrue()) - expectKinds(validator.resources, []string{"CustomResourceDefinition"}) - expectNames(validator.resources, install.GlooCrdNames) - }) - - It("does nothing on preinstall", func() { - err := installer.DoPreInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, install.GlooPreInstallKinds) - expectLabels(validator.resources, install.ExpectedLabels) - }) - - It("installs expected kinds for gloo", func() { - err := installer.DoInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, install.GlooInstallKinds) - expectLabels(validator.resources, install.ExpectedLabels) - }) + It("installs cleanly by default", func() { + installConfig := &options.Install{ + Namespace: defaults.GlooSystem, + HelmReleaseName: constants.GlooReleaseName, + } - }) + helmEnv := &cli.EnvSettings{ + KubeConfig: "path-to-kube-config", + } - Context("Knative with default values and no previous knative", func() { + mockHelmInstallation.EXPECT(). + Run(chart, map[string]interface{}{}). + Return(helmRelease, nil) - BeforeEach(func() { - spec, err := install.GetInstallSpec(&opts, constants.KnativeValuesFileName) - Expect(err).NotTo(HaveOccurred()) - validator = MockInstallClient{ - expectedCrds: install.GlooCrdNames, - } - installer, err = install.NewGlooStagedInstaller(&opts, *spec, &validator) - Expect(err).NotTo(HaveOccurred()) - }) + mockHelmClient.EXPECT(). + NewInstall(defaults.GlooSystem, installConfig.HelmReleaseName, installConfig.DryRun). + Return(mockHelmInstallation, helmEnv, nil) - It("installs all crds", func() { - err := installer.DoCrdInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeTrue()) - expectKinds(validator.resources, []string{"CustomResourceDefinition"}) - expectNames(validator.resources, install.GlooCrdNames) - }) + mockHelmClient.EXPECT(). + DownloadChart(glooOsChartUri). + Return(chart, nil) - It("does nothing on preinstall", func() { - err := installer.DoPreInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, append([]string{"Settings"}, install.GlooPreInstallKinds...)) - expectLabels(validator.resources, install.ExpectedLabels) - }) + mockHelmClient.EXPECT(). + ReleaseExists(defaults.GlooSystem, constants.GlooReleaseName). + Return(false, nil) - It("installs expected kinds for gloo", func() { - err := installer.DoInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) + dryRunOutputBuffer := new(bytes.Buffer) - expectKinds(validator.resources, withSettings(install.GlooInstallKinds)) - expectLabels(validator.resources, install.ExpectedLabels) + installer := install.NewInstallerWithWriter(mockHelmClient, dryRunOutputBuffer) + err := installer.Install(&install.InstallerConfig{ + InstallCliArgs: installConfig, }) + Expect(err).NotTo(HaveOccurred(), "No error should result from the installation") + Expect(dryRunOutputBuffer.String()).To(BeEmpty()) }) - Context("Knative with default values and previous knative (ours)", func() { - - BeforeEach(func() { - spec, err := install.GetInstallSpec(&opts, constants.KnativeValuesFileName) - Expect(err).NotTo(HaveOccurred()) - validator = MockInstallClient{ - expectedCrds: install.GlooCrdNames, - knativeInstalled: true, - knativeOurs: true, - } - installer, err = install.NewGlooStagedInstaller(&opts, *spec, &validator) - Expect(err).NotTo(HaveOccurred()) - }) - - It("installs gloo crds only", func() { - err := installer.DoCrdInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeTrue()) - expectKinds(validator.resources, []string{"CustomResourceDefinition"}) - expectNames(validator.resources, install.GlooCrdNames) - }) - - It("does nothing on preinstall", func() { - err := installer.DoPreInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, append([]string{"Settings"}, install.GlooPreInstallKinds...)) - expectLabels(validator.resources, install.ExpectedLabels) - }) - - It("installs expected kinds for gloo", func() { - err := installer.DoInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, withSettings(install.GlooInstallKinds)) - expectLabels(validator.resources, install.ExpectedLabels) - }) + It("outputs the expected kinds when in a dry run", func() { + installConfig := &options.Install{ + Namespace: defaults.GlooSystem, + HelmReleaseName: constants.GlooReleaseName, + DryRun: true, + } - }) + helmEnv := &cli.EnvSettings{ + KubeConfig: "path-to-kube-config", + } - Context("Knative with default values and previous knative (not ours)", func() { + mockHelmInstallation.EXPECT(). + Run(chart, map[string]interface{}{}). + Return(helmRelease, nil) - BeforeEach(func() { - spec, err := install.GetInstallSpec(&opts, constants.KnativeValuesFileName) - Expect(err).NotTo(HaveOccurred()) - validator = MockInstallClient{ - expectedCrds: install.GlooCrdNames, - knativeInstalled: true, - } - installer, err = install.NewGlooStagedInstaller(&opts, *spec, &validator) - Expect(err).NotTo(HaveOccurred()) - }) + mockHelmClient.EXPECT(). + NewInstall(defaults.GlooSystem, installConfig.HelmReleaseName, installConfig.DryRun). + Return(mockHelmInstallation, helmEnv, nil) - It("installs gloo crds only", func() { - err := installer.DoCrdInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeTrue()) - expectKinds(validator.resources, []string{"CustomResourceDefinition"}) - expectNames(validator.resources, install.GlooCrdNames) - }) + mockHelmClient.EXPECT(). + DownloadChart(glooOsChartUri). + Return(chart, nil) - It("does nothing on preinstall", func() { - err := installer.DoPreInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, append([]string{"Settings"}, install.GlooPreInstallKinds...)) - expectLabels(validator.resources, install.ExpectedLabels) - }) + dryRunOutputBuffer := new(bytes.Buffer) + installer := install.NewInstallerWithWriter(mockHelmClient, dryRunOutputBuffer) - It("installs expected kinds for gloo", func() { - err := installer.DoInstall() - Expect(err).NotTo(HaveOccurred()) - Expect(validator.applied).To(BeTrue()) - Expect(validator.waited).To(BeFalse()) - expectKinds(validator.resources, withSettings(install.GlooInstallKinds)) - expectLabels(validator.resources, install.ExpectedLabels) + err := installer.Install(&install.InstallerConfig{ + InstallCliArgs: installConfig, }) - }) - - Context("Enterprise Gateway NamespacedGlooKubeInstallClient", func() { - var ( - kubectlCmd string - kubeInstallClient install.NamespacedGlooKubeInstallClient - ) - BeforeEach(func() { + Expect(err).NotTo(HaveOccurred(), "No error should result from the installation") - MockKubectl := func(stdin io.Reader, args ...string) error { - kubectl := exec.Command("kubectl", args...) - kubectlCmd = fmt.Sprintf("running kubectl command: %v\n", kubectl.Args) - return nil - } - - opts.Install.Namespace = "gloo-system-test" - kubeInstallClient = install.NamespacedGlooKubeInstallClient{ - Namespace: opts.Install.Namespace, - Delegate: &MockInstallClient{}, - Executor: MockKubectl, - } - }) - - It("ensure namespace argument is passed into kubectl apply", func() { - err := kubeInstallClient.KubectlApply([]byte{}) - Expect(err).NotTo(HaveOccurred()) - Expect(kubectlCmd).To(Equal("running kubectl command: [kubectl apply -n gloo-system-test -f -]\n")) - }) + dryRunOutput := dryRunOutputBuffer.String() + Expect(dryRunOutput).To(ContainSubstring(testCrdContent), "Should output CRD definitions") + Expect(dryRunOutput).NotTo(ContainSubstring(constants.HookCleanupResourceAnnotation), "Should not output cleanup hooks") + Expect(dryRunOutput).To(ContainSubstring("helm.sh/hook"), "Should output non-cleanup hooks") }) }) diff --git a/projects/gloo/cli/pkg/cmd/install/knative.go b/projects/gloo/cli/pkg/cmd/install/knative.go index d3b9bfb8f06..74e9c503a4c 100644 --- a/projects/gloo/cli/pkg/cmd/install/knative.go +++ b/projects/gloo/cli/pkg/cmd/install/knative.go @@ -1,6 +1,7 @@ package install import ( + "context" "encoding/json" "fmt" "io/ioutil" @@ -8,6 +9,13 @@ import ( "os" "regexp" "strings" + "time" + + "github.com/solo-io/go-utils/contextutils" + "github.com/solo-io/go-utils/kubeutils" + "github.com/solo-io/solo-kit/test/setup" + "go.uber.org/zap" + "helm.sh/helm/v3/pkg/chartutil" "github.com/solo-io/gloo/projects/gloo/cli/pkg/helpers" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -41,10 +49,11 @@ const ( func knativeCmd(opts *options.Options) *cobra.Command { cmd := &cobra.Command{ Use: "knative", - Short: "install Knative with Gloo on kubernetes", + Short: "install Knative with Gloo on Kubernetes", Long: "requires kubectl to be installed", PreRun: setVerboseMode(opts), RunE: func(cmd *cobra.Command, args []string) error { + if opts.Install.Knative.InstallKnative { if !opts.Install.DryRun { installed, _, err := checkKnativeInstallation() @@ -64,7 +73,37 @@ func knativeCmd(opts *options.Options) *cobra.Command { } if !opts.Install.Knative.SkipGlooInstall { - if err := installGloo(opts, constants.KnativeValuesFileName); err != nil { + + // wait for knative apiservice (autoscaler metrics) to be healthy before attempting gloo installation + // if we try to install before it's ready, helm is unhappy because it can't get apiservice endpoints + ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) + defer cancel() + for { + stdout, _ := setup.KubectlOut("get", "apiservice", "-ojsonpath='{.items[*].status.conditions[*].status}'") + if len(stdout) > 0 && !strings.Contains(stdout, "False") { + // knative apiservice is ready, we can attempt gloo installation now! + break + } + if ctx.Err() != nil { + return errors.New("timed out waiting for knative apiservice to be ready") + } + time.Sleep(1 * time.Second) + } + + knativeValues, err := RenderKnativeValues(opts.Install.Knative.InstallKnativeVersion) + if err != nil { + return err + } + knativeOverrides, err := chartutil.ReadValues([]byte(knativeValues)) + if err != nil { + return errors.Wrapf(err, "parsing override values for knative mode") + } + + if err := NewInstaller(DefaultHelmClient()).Install(&InstallerConfig{ + InstallCliArgs: &opts.Install, + ExtraValues: knativeOverrides, + Verbose: opts.Top.Verbose, + }); err != nil { return errors.Wrapf(err, "installing gloo in knative mode") } } @@ -72,7 +111,6 @@ func knativeCmd(opts *options.Options) *cobra.Command { }, } pflags := cmd.PersistentFlags() - flagutils.AddInstallFlags(pflags, &opts.Install) flagutils.AddKnativeInstallFlags(pflags, &opts.Install.Knative) return cmd } @@ -342,3 +380,16 @@ func getCrdManifests(manifests string) ([]string, string, error) { // re-join the objects into a single manifest return crdNames, strings.Join(crdManifests, yamlJoiner), nil } + +func waitForCrdsToBeRegistered(ctx context.Context, crds []string) error { + apiExts := helpers.MustApiExtsClient() + logger := contextutils.LoggerFrom(ctx) + for _, crdName := range crds { + logger.Debugw("waiting for crd to be registered", zap.String("crd", crdName)) + if err := kubeutils.WaitForCrdActive(apiExts, crdName); err != nil { + return errors.Wrapf(err, "waiting for crd %v to become registered", crdName) + } + } + + return nil +} diff --git a/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_client.go b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_client.go new file mode 100644 index 00000000000..e9d4aa81284 --- /dev/null +++ b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_client.go @@ -0,0 +1,113 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install (interfaces: HelmClient) + +// Package mocks is a generated GoMock package. +package mocks + +import ( + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + install "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install" + chart "helm.sh/helm/v3/pkg/chart" + cli "helm.sh/helm/v3/pkg/cli" +) + +// MockHelmClient is a mock of HelmClient interface +type MockHelmClient struct { + ctrl *gomock.Controller + recorder *MockHelmClientMockRecorder +} + +// MockHelmClientMockRecorder is the mock recorder for MockHelmClient +type MockHelmClientMockRecorder struct { + mock *MockHelmClient +} + +// NewMockHelmClient creates a new mock instance +func NewMockHelmClient(ctrl *gomock.Controller) *MockHelmClient { + mock := &MockHelmClient{ctrl: ctrl} + mock.recorder = &MockHelmClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockHelmClient) EXPECT() *MockHelmClientMockRecorder { + return m.recorder +} + +// DownloadChart mocks base method +func (m *MockHelmClient) DownloadChart(arg0 string) (*chart.Chart, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownloadChart", arg0) + ret0, _ := ret[0].(*chart.Chart) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownloadChart indicates an expected call of DownloadChart +func (mr *MockHelmClientMockRecorder) DownloadChart(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadChart", reflect.TypeOf((*MockHelmClient)(nil).DownloadChart), arg0) +} + +// NewInstall mocks base method +func (m *MockHelmClient) NewInstall(arg0, arg1 string, arg2 bool) (install.HelmInstallation, *cli.EnvSettings, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NewInstall", arg0, arg1, arg2) + ret0, _ := ret[0].(install.HelmInstallation) + ret1, _ := ret[1].(*cli.EnvSettings) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// NewInstall indicates an expected call of NewInstall +func (mr *MockHelmClientMockRecorder) NewInstall(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewInstall", reflect.TypeOf((*MockHelmClient)(nil).NewInstall), arg0, arg1, arg2) +} + +// NewUninstall mocks base method +func (m *MockHelmClient) NewUninstall(arg0 string) (install.HelmUninstallation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NewUninstall", arg0) + ret0, _ := ret[0].(install.HelmUninstallation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NewUninstall indicates an expected call of NewUninstall +func (mr *MockHelmClientMockRecorder) NewUninstall(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewUninstall", reflect.TypeOf((*MockHelmClient)(nil).NewUninstall), arg0) +} + +// ReleaseExists mocks base method +func (m *MockHelmClient) ReleaseExists(arg0, arg1 string) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReleaseExists", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ReleaseExists indicates an expected call of ReleaseExists +func (mr *MockHelmClientMockRecorder) ReleaseExists(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReleaseExists", reflect.TypeOf((*MockHelmClient)(nil).ReleaseExists), arg0, arg1) +} + +// ReleaseList mocks base method +func (m *MockHelmClient) ReleaseList(arg0 string) (install.HelmReleaseListRunner, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReleaseList", arg0) + ret0, _ := ret[0].(install.HelmReleaseListRunner) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ReleaseList indicates an expected call of ReleaseList +func (mr *MockHelmClientMockRecorder) ReleaseList(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReleaseList", reflect.TypeOf((*MockHelmClient)(nil).ReleaseList), arg0) +} diff --git a/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_installation.go b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_installation.go new file mode 100644 index 00000000000..20bcffca5c5 --- /dev/null +++ b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_installation.go @@ -0,0 +1,51 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install (interfaces: HelmInstallation) + +// Package mocks is a generated GoMock package. +package mocks + +import ( + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + chart "helm.sh/helm/v3/pkg/chart" + release "helm.sh/helm/v3/pkg/release" +) + +// MockHelmInstallation is a mock of HelmInstallation interface +type MockHelmInstallation struct { + ctrl *gomock.Controller + recorder *MockHelmInstallationMockRecorder +} + +// MockHelmInstallationMockRecorder is the mock recorder for MockHelmInstallation +type MockHelmInstallationMockRecorder struct { + mock *MockHelmInstallation +} + +// NewMockHelmInstallation creates a new mock instance +func NewMockHelmInstallation(ctrl *gomock.Controller) *MockHelmInstallation { + mock := &MockHelmInstallation{ctrl: ctrl} + mock.recorder = &MockHelmInstallationMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockHelmInstallation) EXPECT() *MockHelmInstallationMockRecorder { + return m.recorder +} + +// Run mocks base method +func (m *MockHelmInstallation) Run(arg0 *chart.Chart, arg1 map[string]interface{}) (*release.Release, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run", arg0, arg1) + ret0, _ := ret[0].(*release.Release) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Run indicates an expected call of Run +func (mr *MockHelmInstallationMockRecorder) Run(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockHelmInstallation)(nil).Run), arg0, arg1) +} diff --git a/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_release_list.go b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_release_list.go new file mode 100644 index 00000000000..9acad081cde --- /dev/null +++ b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_release_list.go @@ -0,0 +1,62 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install (interfaces: HelmReleaseListRunner) + +// Package mocks is a generated GoMock package. +package mocks + +import ( + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + release "helm.sh/helm/v3/pkg/release" +) + +// MockHelmReleaseListRunner is a mock of HelmReleaseListRunner interface +type MockHelmReleaseListRunner struct { + ctrl *gomock.Controller + recorder *MockHelmReleaseListRunnerMockRecorder +} + +// MockHelmReleaseListRunnerMockRecorder is the mock recorder for MockHelmReleaseListRunner +type MockHelmReleaseListRunnerMockRecorder struct { + mock *MockHelmReleaseListRunner +} + +// NewMockHelmReleaseListRunner creates a new mock instance +func NewMockHelmReleaseListRunner(ctrl *gomock.Controller) *MockHelmReleaseListRunner { + mock := &MockHelmReleaseListRunner{ctrl: ctrl} + mock.recorder = &MockHelmReleaseListRunnerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockHelmReleaseListRunner) EXPECT() *MockHelmReleaseListRunnerMockRecorder { + return m.recorder +} + +// Run mocks base method +func (m *MockHelmReleaseListRunner) Run() ([]*release.Release, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run") + ret0, _ := ret[0].([]*release.Release) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Run indicates an expected call of Run +func (mr *MockHelmReleaseListRunnerMockRecorder) Run() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockHelmReleaseListRunner)(nil).Run)) +} + +// SetFilter mocks base method +func (m *MockHelmReleaseListRunner) SetFilter(arg0 string) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetFilter", arg0) +} + +// SetFilter indicates an expected call of SetFilter +func (mr *MockHelmReleaseListRunnerMockRecorder) SetFilter(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetFilter", reflect.TypeOf((*MockHelmReleaseListRunner)(nil).SetFilter), arg0) +} diff --git a/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_uninstallation.go b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_uninstallation.go new file mode 100644 index 00000000000..9a5ef266c93 --- /dev/null +++ b/projects/gloo/cli/pkg/cmd/install/mocks/mock_helm_uninstallation.go @@ -0,0 +1,50 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install (interfaces: HelmUninstallation) + +// Package mocks is a generated GoMock package. +package mocks + +import ( + reflect "reflect" + + gomock "github.com/golang/mock/gomock" + release "helm.sh/helm/v3/pkg/release" +) + +// MockHelmUninstallation is a mock of HelmUninstallation interface +type MockHelmUninstallation struct { + ctrl *gomock.Controller + recorder *MockHelmUninstallationMockRecorder +} + +// MockHelmUninstallationMockRecorder is the mock recorder for MockHelmUninstallation +type MockHelmUninstallationMockRecorder struct { + mock *MockHelmUninstallation +} + +// NewMockHelmUninstallation creates a new mock instance +func NewMockHelmUninstallation(ctrl *gomock.Controller) *MockHelmUninstallation { + mock := &MockHelmUninstallation{ctrl: ctrl} + mock.recorder = &MockHelmUninstallationMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockHelmUninstallation) EXPECT() *MockHelmUninstallationMockRecorder { + return m.recorder +} + +// Run mocks base method +func (m *MockHelmUninstallation) Run(arg0 string) (*release.UninstallReleaseResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run", arg0) + ret0, _ := ret[0].(*release.UninstallReleaseResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Run indicates an expected call of Run +func (mr *MockHelmUninstallationMockRecorder) Run(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockHelmUninstallation)(nil).Run), arg0) +} diff --git a/projects/gloo/cli/pkg/cmd/install/root.go b/projects/gloo/cli/pkg/cmd/install/root.go index 766413f88e1..c9b6ad4153e 100644 --- a/projects/gloo/cli/pkg/cmd/install/root.go +++ b/projects/gloo/cli/pkg/cmd/install/root.go @@ -12,6 +12,7 @@ import ( ) func InstallCmd(opts *options.Options, optionsFunc ...cliutils.OptionsFunc) *cobra.Command { + cmd := &cobra.Command{ Use: constants.INSTALL_COMMAND.Use, Short: constants.INSTALL_COMMAND.Short, @@ -23,7 +24,10 @@ func InstallCmd(opts *options.Options, optionsFunc ...cliutils.OptionsFunc) *cob knativeCmd(opts), ) cliutils.ApplyOptions(cmd, optionsFunc) - flagutils.AddVerboseFlag(cmd.PersistentFlags(), opts) + + pFlags := cmd.PersistentFlags() + flagutils.AddVerboseFlag(pFlags, opts) + flagutils.AddInstallFlags(pFlags, &opts.Install) return cmd } @@ -53,6 +57,7 @@ func UninstallCmd(opts *options.Options, optionsFunc ...cliutils.OptionsFunc) *c func setVerboseMode(opts *options.Options) func(cmd *cobra.Command, args []string) { return func(cmd *cobra.Command, args []string) { - install.SetVerbose(opts.Top.Verbose) + install.SetVerbose(opts.Top.Verbose) // Sets kubectl verbose flag + setVerbose(opts.Top.Verbose) // Sets helm library's debug flag } } diff --git a/projects/gloo/cli/pkg/cmd/install/uninstall.go b/projects/gloo/cli/pkg/cmd/install/uninstall.go index e0810b60a90..7720d81dba6 100644 --- a/projects/gloo/cli/pkg/cmd/install/uninstall.go +++ b/projects/gloo/cli/pkg/cmd/install/uninstall.go @@ -2,155 +2,176 @@ package install import ( "fmt" + "io" "os" - "strings" "github.com/solo-io/gloo/pkg/cliutil" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/yaml" + "github.com/solo-io/gloo/pkg/cliutil/install" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" ) -const installationIdLabel = "installationId" - -var subchartAppNames = []string{"glooe-grafana", "glooe-prometheus"} - func UninstallGloo(opts *options.Options, cli install.KubeCli) error { - if err := uninstallGloo(opts, cli); err != nil { - fmt.Fprintf(os.Stderr, "Uninstall failed. Detailed logs available at %s.\n", cliutil.GetLogsPath()) + uninstaller := NewUninstaller(DefaultHelmClient(), cli) + if err := uninstaller.Uninstall(opts); err != nil { + _, _ = fmt.Fprintf(os.Stderr, "Uninstall failed. Detailed logs available at %s.\n", cliutil.GetLogsPath()) return err } return nil } -func uninstallGloo(opts *options.Options, cli install.KubeCli) error { - // attempt to uninstall by deleting resources with the label containing this installation ID - installationId, err := findInstallationId(opts, cli) - if err != nil && !opts.Uninstall.Force { - return CantUninstallWithoutInstallId(err) - } else if err != nil && opts.Uninstall.Force { - fmt.Printf("Warning: An error occurred while determining the installation ID, but continuing because --force was used\n%s\n", err.Error()) - } +type Uninstaller interface { + Uninstall(cliArgs *options.Options) error +} - if installationId != "" { - fmt.Printf("Removing gloo, installation ID %s\n", installationId) - } +type uninstaller struct { + helmClient HelmClient + kubeCli install.KubeCli + output io.Writer +} + +func NewUninstaller(helmClient HelmClient, kubeCli install.KubeCli) Uninstaller { + return NewUninstallerWithOutput(helmClient, kubeCli, os.Stdout) +} - if opts.Uninstall.DeleteNamespace || opts.Uninstall.DeleteAll { - deleteNamespace(cli, opts.Uninstall.Namespace) - } else { - deleteGlooSystem(cli, opts.Uninstall.Namespace, installationId) +// visible for testing +func NewUninstallerWithOutput(helmClient HelmClient, kubeCli install.KubeCli, output io.Writer) Uninstaller { + return &uninstaller{ + helmClient: helmClient, + kubeCli: kubeCli, + output: output, } +} - if opts.Uninstall.DeleteCrds || opts.Uninstall.DeleteAll { - deleteGlooCrds(cli) +func (u *uninstaller) Uninstall(cliArgs *options.Options) error { + namespace := cliArgs.Uninstall.Namespace + releaseName := cliArgs.Uninstall.HelmReleaseName + if releaseExists, err := u.helmClient.ReleaseExists(namespace, releaseName); err != nil { + return err + } else if !releaseExists { + _, _ = fmt.Fprintf(u.output, "No Gloo installation found in namespace %s\n", namespace) + return nil } - if opts.Uninstall.DeleteAll { - deleteRbac(cli, installationId) + uninstallAction, err := u.helmClient.NewUninstall(namespace) + if err != nil { + return err } - uninstallKnativeIfNecessary() + var crdNames []string - return nil -} + // need to run this first, as it depends on the release still being present + if cliArgs.Uninstall.DeleteCrds || cliArgs.Uninstall.DeleteAll { + crdNames, err = u.findCrdNamesForRelease(namespace, releaseName) + if err != nil { + return err + } + } -// attempt to read the installation id off of the gloo pod labels -func findInstallationId(opts *options.Options, cli install.KubeCli) (string, error) { - jsonPath := fmt.Sprintf("-ojsonpath='{.items[0].metadata.labels.%s}'", installationIdLabel) - kubeOutput, err := cli.KubectlOut(nil, "-n", opts.Uninstall.Namespace, "get", "deployment", "-l", "gloo=gloo", jsonPath) - if err != nil { - return "", FailedToFindLabel(err) + _, _ = fmt.Fprintf(u.output, "Removing Gloo system components from namespace %s...\n", namespace) + if _, err = uninstallAction.Run(releaseName); err != nil { + return err } - // the jsonpath formatting will leave single-quotes at the beginning and end of the installation ID. Strip them out before using the value - installationId := strings.Replace(string(kubeOutput), "'", "", -1) + u.uninstallKnativeIfNecessary() + + if cliArgs.Uninstall.DeleteCrds || cliArgs.Uninstall.DeleteAll { + err := u.deleteGlooCrds(crdNames) + if err != nil { + return err + } + } - // if the label isn't present (ie, on an older install of gloo), then we get the empty string back - if installationId == "" { - return "", LabelNotSet + if cliArgs.Uninstall.DeleteNamespace || cliArgs.Uninstall.DeleteAll { + u.deleteNamespace(cliArgs.Uninstall.Namespace) } - return installationId, nil + return nil } -func deleteRbac(cli install.KubeCli, installationId string) { - fmt.Printf("Removing Gloo RBAC configuration...\n") - failedRbacs := "" - label := "app=gloo" - if installationId != "" { - label += fmt.Sprintf(",%s=%s", installationIdLabel, installationId) +func (u *uninstaller) findCrdNamesForRelease(namespace, releaseName string) (crdNames []string, err error) { + lister, err := u.helmClient.ReleaseList(namespace) + if err != nil { + return nil, err } - for _, rbacKind := range GlooRbacKinds { - if err := cli.Kubectl(nil, "delete", rbacKind, "-l", label); err != nil { - failedRbacs += rbacKind + " " - } + releases, err := lister.Run() + if err != nil { + return nil, err } - if len(failedRbacs) > 0 { - fmt.Printf("Unable to delete Gloo RBACs: %s. Continuing...\n", failedRbacs) + if len(releases) == 0 { + return nil, NoReleaseForCRDs + } else if len(releases) > 1 { + return nil, MultipleReleasesForCRDs } -} -func deleteGlooSystem(cli install.KubeCli, namespace, installationId string) { - fmt.Printf("Removing Gloo system components from namespace %s...\n", namespace) - failedComponents := "" + rel := releases[0] + for _, crd := range rel.Chart.CRDs() { + resource, err := makeUnstructured(string(crd.Data)) + if err != nil { + return nil, err + } - var labelsToDelete []string - for _, appName := range subchartAppNames { - labelsToDelete = append(labelsToDelete, fmt.Sprintf("app=%s", appName)) + crdNames = append(crdNames, resource.GetName()) } - // if we have no installation ID, then the best we can do is to delete the label app=gloo - if installationId == "" { - labelsToDelete = append(labelsToDelete, "app=gloo") - } else { - labelsToDelete = append(labelsToDelete, fmt.Sprintf("app=gloo,%s=%s", installationIdLabel, installationId)) - } + return crdNames, nil +} - for _, kind := range GlooSystemKinds { - for _, label := range labelsToDelete { - if err := cli.Kubectl(nil, "delete", kind, "-l", label, "-n", namespace); err != nil { - failedComponents += kind + " (for label " + label + ") " - } - } - } - if len(failedComponents) > 0 { - fmt.Printf("Unable to delete gloo system components: %s. Continuing...\n", failedComponents) +// expects the Helm release to still be present +func (u *uninstaller) deleteGlooCrds(crdNames []string) error { + if len(crdNames) == 0 { + return nil } -} -func deleteGlooCrds(cli install.KubeCli) { - fmt.Printf("Removing Gloo CRDs...\n") + _, _ = fmt.Fprintf(u.output, "Removing Gloo CRDs...\n") args := []string{"delete", "crd"} - for _, crd := range GlooCrdNames { - args = append(args, crd) + for _, crdName := range crdNames { + args = append(args, crdName) } - if err := cli.Kubectl(nil, args...); err != nil { - fmt.Printf("Unable to delete Gloo CRDs. Continuing...\n") + if err := u.kubeCli.Kubectl(nil, args...); err != nil { + _, _ = fmt.Fprintf(u.output, "Unable to delete Gloo CRDs. Continuing...\n") } + + return nil } -func deleteNamespace(cli install.KubeCli, namespace string) { +func (u *uninstaller) deleteNamespace(namespace string) { fmt.Printf("Removing namespace %s...\n", namespace) - if err := cli.Kubectl(nil, "delete", "namespace", namespace); err != nil { + if err := u.kubeCli.Kubectl(nil, "delete", "namespace", namespace); err != nil { fmt.Printf("Unable to delete namespace %s. Continuing...\n", namespace) } } -func uninstallKnativeIfNecessary() { +func makeUnstructured(manifest string) (*unstructured.Unstructured, error) { + jsn, err := yaml.YAMLToJSON([]byte(manifest)) + if err != nil { + return nil, err + } + runtimeObj, err := runtime.Decode(unstructured.UnstructuredJSONScheme, jsn) + if err != nil { + return nil, err + } + return runtimeObj.(*unstructured.Unstructured), nil +} + +func (u *uninstaller) uninstallKnativeIfNecessary() { _, installOpts, err := checkKnativeInstallation() if err != nil { - fmt.Printf("Finding knative installation\n") + _, _ = fmt.Fprintf(u.output, "Finding knative installation\n") return } if installOpts != nil { - fmt.Printf("Removing knative components installed by Gloo %#v...\n", installOpts) + _, _ = fmt.Fprintf(u.output, "Removing knative components installed by Gloo %#v...\n", installOpts) manifests, err := RenderKnativeManifests(*installOpts) if err != nil { - fmt.Printf("Could not determine which knative components to remove. Continuing...\n") + _, _ = fmt.Fprintf(u.output, "Could not determine which knative components to remove. Continuing...\n") return } if err := install.KubectlDelete([]byte(manifests), "--ignore-not-found"); err != nil { - fmt.Printf("Unable to delete knative. Continuing...\n") + _, _ = fmt.Fprintf(u.output, "Unable to delete knative. Continuing...\n") } } } diff --git a/projects/gloo/cli/pkg/cmd/install/uninstall_test.go b/projects/gloo/cli/pkg/cmd/install/uninstall_test.go index 1cb3048f637..b9b135242c0 100644 --- a/projects/gloo/cli/pkg/cmd/install/uninstall_test.go +++ b/projects/gloo/cli/pkg/cmd/install/uninstall_test.go @@ -1,246 +1,155 @@ package install_test import ( - "fmt" - - installutils "github.com/solo-io/gloo/pkg/cliutil/install" + "bytes" + "github.com/golang/mock/gomock" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + installutil "github.com/solo-io/gloo/pkg/cliutil/install" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/install/mocks" "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/flagutils" - "github.com/spf13/pflag" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" + "github.com/solo-io/gloo/projects/gloo/pkg/defaults" + "helm.sh/helm/v3/pkg/chart" + "helm.sh/helm/v3/pkg/release" ) var _ = Describe("Uninstall", func() { - - const ( - deleteCrds = `delete crd gateways.gateway.solo.io proxies.gloo.solo.io settings.gloo.solo.io upstreams.gloo.solo.io upstreamgroups.gloo.solo.io virtualservices.gateway.solo.io routetables.gateway.solo.io authconfigs.enterprise.gloo.solo.io` - testInstallId = "test-install-id" - - // expects to be formatted with the namespace - findInstallIdCmd = "-n %s get deployment -l gloo=gloo -ojsonpath='{.items[0].metadata.labels.installationId}'" + var ( + ctrl *gomock.Controller + mockHelmClient *mocks.MockHelmClient + mockHelmUninstallation *mocks.MockHelmUninstallation + mockReleaseListRunner *mocks.MockHelmReleaseListRunner + crdName = "authconfigs.enterprise.gloo.solo.io" + + testCRD = ` +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: ` + crdName + ` +spec: + group: enterprise.gloo.solo.io + names: + kind: AuthConfig + listKind: AuthConfigList + plural: authconfigs + shortNames: + - ac + singular: authconfig + scope: Namespaced + version: v1 + versions: + - name: v1 + served: true + storage: true +` ) - var flagSet *pflag.FlagSet - var opts options.Options - BeforeEach(func() { - flagSet = pflag.NewFlagSet("uninstall", pflag.ContinueOnError) - opts = options.Options{} - flagutils.AddUninstallFlags(flagSet, &opts.Uninstall) - }) - - uninstall := func(cli *installutils.MockKubectl) error { - err := install.UninstallGloo(&opts, cli) - // If this fails, then the mock CLI had extra commands that were expected to run but weren't - Expect(cli.Next).To(BeEquivalentTo(len(cli.Expected))) - - return err - } - - It("works with no args", func() { - flagSet.Parse([]string{}) - commands := []string{ - fmt.Sprintf(findInstallIdCmd, "gloo-system"), - "delete Deployment -l app=glooe-grafana -n gloo-system", - "delete Deployment -l app=glooe-prometheus -n gloo-system", - "delete Deployment -l app=gloo,installationId=test-install-id -n gloo-system", - "delete Service -l app=glooe-grafana -n gloo-system", - "delete Service -l app=glooe-prometheus -n gloo-system", - "delete Service -l app=gloo,installationId=test-install-id -n gloo-system", - "delete ServiceAccount -l app=glooe-grafana -n gloo-system", - "delete ServiceAccount -l app=glooe-prometheus -n gloo-system", - "delete ServiceAccount -l app=gloo,installationId=test-install-id -n gloo-system", - "delete ConfigMap -l app=glooe-grafana -n gloo-system", - "delete ConfigMap -l app=glooe-prometheus -n gloo-system", - "delete ConfigMap -l app=gloo,installationId=test-install-id -n gloo-system", - "delete Job -l app=glooe-grafana -n gloo-system", - "delete Job -l app=glooe-prometheus -n gloo-system", - "delete Job -l app=gloo,installationId=test-install-id -n gloo-system", - } - stdoutLines := []string{testInstallId} - cli := installutils.NewMockKubectl(commands, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") - }) - - It("works with namespace", func() { - flagSet.Parse([]string{"-n", "foo"}) - cmds := []string{ - fmt.Sprintf(findInstallIdCmd, "foo"), - "delete Deployment -l app=glooe-grafana -n foo", - "delete Deployment -l app=glooe-prometheus -n foo", - "delete Deployment -l app=gloo,installationId=test-install-id -n foo", - "delete Service -l app=glooe-grafana -n foo", - "delete Service -l app=glooe-prometheus -n foo", - "delete Service -l app=gloo,installationId=test-install-id -n foo", - "delete ServiceAccount -l app=glooe-grafana -n foo", - "delete ServiceAccount -l app=glooe-prometheus -n foo", - "delete ServiceAccount -l app=gloo,installationId=test-install-id -n foo", - "delete ConfigMap -l app=glooe-grafana -n foo", - "delete ConfigMap -l app=glooe-prometheus -n foo", - "delete ConfigMap -l app=gloo,installationId=test-install-id -n foo", - "delete Job -l app=glooe-grafana -n foo", - "delete Job -l app=glooe-prometheus -n foo", - "delete Job -l app=gloo,installationId=test-install-id -n foo", - } - stdoutLines := []string{testInstallId} - cli := installutils.NewMockKubectl(cmds, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") - }) + ctrl = gomock.NewController(GinkgoT()) - It("works with delete crds", func() { - flagSet.Parse([]string{"--delete-crds"}) - cmds := []string{ - fmt.Sprintf(findInstallIdCmd, "gloo-system"), - "delete Deployment -l app=glooe-grafana -n gloo-system", - "delete Deployment -l app=glooe-prometheus -n gloo-system", - "delete Deployment -l app=gloo,installationId=test-install-id -n gloo-system", - "delete Service -l app=glooe-grafana -n gloo-system", - "delete Service -l app=glooe-prometheus -n gloo-system", - "delete Service -l app=gloo,installationId=test-install-id -n gloo-system", - "delete ServiceAccount -l app=glooe-grafana -n gloo-system", - "delete ServiceAccount -l app=glooe-prometheus -n gloo-system", - "delete ServiceAccount -l app=gloo,installationId=test-install-id -n gloo-system", - "delete ConfigMap -l app=glooe-grafana -n gloo-system", - "delete ConfigMap -l app=glooe-prometheus -n gloo-system", - "delete ConfigMap -l app=gloo,installationId=test-install-id -n gloo-system", - "delete Job -l app=glooe-grafana -n gloo-system", - "delete Job -l app=glooe-prometheus -n gloo-system", - "delete Job -l app=gloo,installationId=test-install-id -n gloo-system", - deleteCrds, - } - stdoutLines := []string{testInstallId} - cli := installutils.NewMockKubectl(cmds, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") + mockHelmClient = mocks.NewMockHelmClient(ctrl) + mockHelmUninstallation = mocks.NewMockHelmUninstallation(ctrl) + mockReleaseListRunner = mocks.NewMockHelmReleaseListRunner(ctrl) }) - It("works with delete crds and namespace", func() { - flagSet.Parse([]string{"-n", "foo", "--delete-crds"}) - cmds := []string{ - fmt.Sprintf(findInstallIdCmd, "foo"), - "delete Deployment -l app=glooe-grafana -n foo", - "delete Deployment -l app=glooe-prometheus -n foo", - "delete Deployment -l app=gloo,installationId=test-install-id -n foo", - "delete Service -l app=glooe-grafana -n foo", - "delete Service -l app=glooe-prometheus -n foo", - "delete Service -l app=gloo,installationId=test-install-id -n foo", - "delete ServiceAccount -l app=glooe-grafana -n foo", - "delete ServiceAccount -l app=glooe-prometheus -n foo", - "delete ServiceAccount -l app=gloo,installationId=test-install-id -n foo", - "delete ConfigMap -l app=glooe-grafana -n foo", - "delete ConfigMap -l app=glooe-prometheus -n foo", - "delete ConfigMap -l app=gloo,installationId=test-install-id -n foo", - "delete Job -l app=glooe-grafana -n foo", - "delete Job -l app=glooe-prometheus -n foo", - "delete Job -l app=gloo,installationId=test-install-id -n foo", - deleteCrds, - } - stdoutLines := []string{testInstallId} - cli := installutils.NewMockKubectl(cmds, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") + AfterEach(func() { + ctrl.Finish() }) - It("works with delete namespace", func() { - flagSet.Parse([]string{"--delete-namespace"}) - cli := installutils.NewMockKubectl([]string{fmt.Sprintf(findInstallIdCmd, "gloo-system"), "delete namespace gloo-system"}, []string{testInstallId}) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") - }) - - It("works with delete namespace with custom namespace", func() { - flagSet.Parse([]string{"--delete-namespace", "-n", "foo"}) - cli := installutils.NewMockKubectl([]string{fmt.Sprintf(findInstallIdCmd, "foo"), "delete namespace foo"}, []string{testInstallId}) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") - }) - - It("works with delete namespace and crds", func() { - flagSet.Parse([]string{"--delete-namespace", "--delete-crds"}) - cli := installutils.NewMockKubectl([]string{fmt.Sprintf(findInstallIdCmd, "gloo-system"), "delete namespace gloo-system", deleteCrds}, []string{testInstallId}) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") - }) + It("uninstalls cleanly by default", func() { + mockHelmClient.EXPECT(). + NewUninstall(defaults.GlooSystem). + Return(mockHelmUninstallation, nil) + mockHelmUninstallation.EXPECT(). + Run(constants.GlooReleaseName). + Return(nil, nil) + mockHelmClient.EXPECT(). + ReleaseExists(defaults.GlooSystem, constants.GlooReleaseName). + Return(true, nil) + + outputBuffer := new(bytes.Buffer) + + uninstaller := install.NewUninstallerWithOutput(mockHelmClient, installutil.NewMockKubectl([]string{}, []string{}), outputBuffer) + err := uninstaller.Uninstall(&options.Options{ + Uninstall: options.Uninstall{Namespace: defaults.GlooSystem, HelmReleaseName: constants.GlooReleaseName}, + }) - It("works with delete crds and namespace with custom namespace", func() { - flagSet.Parse([]string{"--delete-namespace", "--delete-crds", "-n", "foo"}) - cli := installutils.NewMockKubectl([]string{fmt.Sprintf(findInstallIdCmd, "foo"), "delete namespace foo", deleteCrds}, []string{testInstallId}) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") + Expect(err).NotTo(HaveOccurred()) }) - It("works with delete all", func() { - flagSet.Parse([]string{"--all"}) - cmds := []string{ - fmt.Sprintf(findInstallIdCmd, "gloo-system"), - "delete namespace gloo-system", - deleteCrds, - "delete ClusterRole -l app=gloo,installationId=test-install-id", - "delete ClusterRoleBinding -l app=gloo,installationId=test-install-id", - } - stdoutLines := []string{testInstallId} - cli := installutils.NewMockKubectl(cmds, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") - }) + It("can uninstall CRDs when requested", func() { + mockHelmClient.EXPECT(). + ReleaseExists(defaults.GlooSystem, constants.GlooReleaseName). + Return(true, nil) + mockReleaseListRunner.EXPECT(). + Run(). + Return([]*release.Release{{ + Name: constants.GlooReleaseName, + Chart: &chart.Chart{ + Files: []*chart.File{{ + Name: "crds/crdA.yaml", + Data: []byte(testCRD), + }}, + }, + }}, nil). + Times(1) + mockHelmClient.EXPECT(). + ReleaseList(defaults.GlooSystem). + Return(mockReleaseListRunner, nil). + Times(1) + mockHelmClient.EXPECT(). + NewUninstall(defaults.GlooSystem). + Return(mockHelmUninstallation, nil) + mockHelmUninstallation.EXPECT(). + Run(constants.GlooReleaseName). + Return(nil, nil) + + outputBuffer := new(bytes.Buffer) + + mockKubectl := installutil.NewMockKubectl([]string{ + "delete crd " + crdName, + }, []string{}) + + uninstaller := install.NewUninstallerWithOutput(mockHelmClient, mockKubectl, outputBuffer) + err := uninstaller.Uninstall(&options.Options{ + Uninstall: options.Uninstall{ + Namespace: defaults.GlooSystem, + HelmReleaseName: constants.GlooReleaseName, + DeleteCrds: true, + }, + }) - It("works with delete all custom namespace", func() { - flagSet.Parse([]string{"--all", "-n", "foo"}) - cmds := []string{ - fmt.Sprintf(findInstallIdCmd, "foo"), - "delete namespace foo", - deleteCrds, - "delete ClusterRole -l app=gloo,installationId=test-install-id", - "delete ClusterRoleBinding -l app=gloo,installationId=test-install-id", - } - stdoutLines := []string{testInstallId} - cli := installutils.NewMockKubectl(cmds, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "The uninstall should be successful") + Expect(err).NotTo(HaveOccurred()) }) - When("the install ID is not discoverable", func() { - It("errors by default", func() { - flagSet.Parse([]string{}) - commands := []string{ - fmt.Sprintf(findInstallIdCmd, "gloo-system"), - } - installId := "" - cli := installutils.NewMockKubectl(commands, []string{installId}) - err := uninstall(cli) - Expect(err).To(HaveOccurred(), "An error should occur if the install ID is not discoverable") + It("can remove namespace when requested", func() { + mockHelmClient.EXPECT(). + ReleaseExists(defaults.GlooSystem, constants.GlooReleaseName). + Return(true, nil) + mockHelmClient.EXPECT(). + NewUninstall(defaults.GlooSystem). + Return(mockHelmUninstallation, nil) + mockHelmUninstallation.EXPECT(). + Run(constants.GlooReleaseName). + Return(nil, nil) + + outputBuffer := new(bytes.Buffer) + + mockKubectl := installutil.NewMockKubectl([]string{ + "delete namespace " + defaults.GlooSystem, + }, []string{}) + + uninstaller := install.NewUninstallerWithOutput(mockHelmClient, mockKubectl, outputBuffer) + err := uninstaller.Uninstall(&options.Options{ + Uninstall: options.Uninstall{ + Namespace: defaults.GlooSystem, + HelmReleaseName: constants.GlooReleaseName, + }, }) - It("proceeds and uses the old logic when forced", func() { - flagSet.Parse([]string{"--force"}) - commands := []string{ - fmt.Sprintf(findInstallIdCmd, "gloo-system"), - "delete Deployment -l app=glooe-grafana -n gloo-system", - "delete Deployment -l app=glooe-prometheus -n gloo-system", - "delete Deployment -l app=gloo -n gloo-system", - "delete Service -l app=glooe-grafana -n gloo-system", - "delete Service -l app=glooe-prometheus -n gloo-system", - "delete Service -l app=gloo -n gloo-system", - "delete ServiceAccount -l app=glooe-grafana -n gloo-system", - "delete ServiceAccount -l app=glooe-prometheus -n gloo-system", - "delete ServiceAccount -l app=gloo -n gloo-system", - "delete ConfigMap -l app=glooe-grafana -n gloo-system", - "delete ConfigMap -l app=glooe-prometheus -n gloo-system", - "delete ConfigMap -l app=gloo -n gloo-system", - "delete Job -l app=glooe-grafana -n gloo-system", - "delete Job -l app=glooe-prometheus -n gloo-system", - "delete Job -l app=gloo -n gloo-system", - } - installId := "" - stdoutLines := []string{installId} - cli := installutils.NewMockKubectl(commands, stdoutLines) - err := uninstall(cli) - Expect(err).NotTo(HaveOccurred(), "An error should not occur if the installation ID is not discoverable but it was forced") - }) + Expect(err).NotTo(HaveOccurred()) }) }) diff --git a/projects/gloo/cli/pkg/cmd/install/util.go b/projects/gloo/cli/pkg/cmd/install/util.go index 925f8c84bf4..49fb79e48ff 100644 --- a/projects/gloo/cli/pkg/cmd/install/util.go +++ b/projects/gloo/cli/pkg/cmd/install/util.go @@ -1,20 +1,5 @@ package install -import ( - "fmt" - "os" - - "github.com/solo-io/go-utils/errors" - - "github.com/solo-io/gloo/install/helm/gloo/generate" - - "github.com/solo-io/gloo/pkg/cliutil" - "github.com/solo-io/gloo/pkg/cliutil/install" - "github.com/solo-io/gloo/pkg/version" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" - "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" -) - var ( // These will get cleaned up by uninstall always GlooSystemKinds []string @@ -87,126 +72,3 @@ func init() { "app": "gloo", } } - -type GlooInstallSpec struct { - ProductName string // gloo or glooe - HelmArchiveUri string - ValueFileName string - UserValueFileNames []string - ExtraValues map[string]interface{} - ValueCallbacks []install.ValuesCallback - ExcludeResources install.ResourceMatcherFunc -} - -// Entry point for all three GLoo installation commands -func installGloo(opts *options.Options, valueFileName string) error { - preInstallMessage(opts) - spec, err := GetInstallSpec(opts, valueFileName) - if err != nil { - return err - } - kubeInstallClient := DefaultGlooKubeInstallClient{} - if err := InstallGloo(opts, *spec, &kubeInstallClient); err != nil { - fmt.Fprintf(os.Stderr, "\nGloo failed to install! Detailed logs available at %s.\n", cliutil.GetLogsPath()) - return err - } - postInstallMessage(opts) - return nil -} - -func preInstallMessage(opts *options.Options) { - if opts.Install.DryRun { - return - } - fmt.Printf("Starting Gloo installation...\n") -} -func postInstallMessage(opts *options.Options) { - if opts.Install.DryRun { - return - } - fmt.Printf("\nGloo was successfully installed!\n") -} - -func GetInstallSpec(opts *options.Options, valueFileName string) (*GlooInstallSpec, error) { - // Get Gloo release version - glooVersion, err := getGlooVersion(opts) - if err != nil { - return nil, err - } - - // Get location of Gloo helm chart - helmChartArchiveUri := fmt.Sprintf(constants.GlooHelmRepoTemplate, glooVersion) - if opts.Install.WithUi { - helmChartArchiveUri = fmt.Sprintf(constants.GlooWithUiHelmRepoTemplate, glooVersion) - } - if helmChartOverride := opts.Install.HelmChartOverride; helmChartOverride != "" { - helmChartArchiveUri = helmChartOverride - } - - var extraValues map[string]interface{} - if opts.Install.Upgrade { - extraValues = map[string]interface{}{"gateway": map[string]interface{}{"upgrade": true}} - } else if opts.Install.WithUi { - // need to make sure the ns is created when installing UI via passing this extra - // value through - extraValues = map[string]interface{}{ - "gloo": map[string]interface{}{ - "namespace": map[string]interface{}{ - "create": "true", - }, - }, - } - } - var valueCallbacks []install.ValuesCallback - if opts.Install.Knative.InstallKnativeVersion != "" { - valueCallbacks = append(valueCallbacks, func(config *generate.HelmConfig) { - if config.Settings != nil && - config.Settings.Integrations != nil && - config.Settings.Integrations.Knative != nil && - config.Settings.Integrations.Knative.Enabled != nil && - *config.Settings.Integrations.Knative.Enabled { - - config.Settings.Integrations.Knative.Version = &opts.Install.Knative.InstallKnativeVersion - - } - }) - } - - return &GlooInstallSpec{ - HelmArchiveUri: helmChartArchiveUri, - ValueFileName: valueFileName, - UserValueFileNames: opts.Install.HelmChartValueFileNames, - ProductName: "gloo", - ExtraValues: extraValues, - ValueCallbacks: valueCallbacks, - ExcludeResources: nil, - }, nil -} - -func getGlooVersion(opts *options.Options) (string, error) { - if opts.Install.WithUi { - return version.EnterpriseTag, nil - } - if !version.IsReleaseVersion() && opts.Install.HelmChartOverride == "" { - return "", errors.Errorf("you must provide a Gloo Helm chart URI via the 'file' option " + - "when running an unreleased version of glooctl") - } - return version.Version, nil -} - -func InstallGloo(opts *options.Options, spec GlooInstallSpec, client GlooKubeInstallClient) error { - installer, err := NewGlooStagedInstaller(opts, spec, client) - if err != nil { - return err - } - - if err := installer.DoCrdInstall(); err != nil { - return err - } - - if err := installer.DoPreInstall(); err != nil { - return err - } - - return installer.DoInstall() -} diff --git a/projects/gloo/cli/pkg/cmd/options/options.go b/projects/gloo/cli/pkg/cmd/options/options.go index 88796cb2375..e715c82debd 100644 --- a/projects/gloo/cli/pkg/cmd/options/options.go +++ b/projects/gloo/cli/pkg/cmd/options/options.go @@ -48,6 +48,7 @@ type Install struct { Namespace string HelmChartOverride string HelmChartValueFileNames []string + HelmReleaseName string Knative Knative LicenseKey string WithUi bool @@ -64,10 +65,10 @@ type Knative struct { type Uninstall struct { Namespace string + HelmReleaseName string DeleteCrds bool DeleteNamespace bool DeleteAll bool - Force bool } type Proxy struct { diff --git a/projects/gloo/cli/pkg/cmdutils/edit.go b/projects/gloo/cli/pkg/cmdutils/edit.go index b4d68c4e940..2874e57f2e7 100644 --- a/projects/gloo/cli/pkg/cmdutils/edit.go +++ b/projects/gloo/cli/pkg/cmdutils/edit.go @@ -11,7 +11,8 @@ import ( "github.com/gogo/protobuf/proto" "github.com/pkg/errors" "github.com/solo-io/go-utils/protoutils" - "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" + + "k8s.io/kubectl/pkg/cmd/util/editor" "github.com/ghodss/yaml" ) diff --git a/projects/gloo/cli/pkg/constants/constants.go b/projects/gloo/cli/pkg/constants/constants.go index 01828ee28aa..4a49450d056 100644 --- a/projects/gloo/cli/pkg/constants/constants.go +++ b/projects/gloo/cli/pkg/constants/constants.go @@ -3,8 +3,9 @@ package constants const ( GlooHelmRepoTemplate = "https://storage.googleapis.com/solo-public-helm/charts/gloo-%s.tgz" GlooWithUiHelmRepoTemplate = "https://storage.googleapis.com/gloo-os-ui-helm/charts/gloo-os-with-ui-%s.tgz" - IngressValuesFileName = "values-ingress.yaml" - GatewayValuesFileName = "" // empty because the chart will have the 'gateway' values by default - KnativeValuesFileName = "values-knative.yaml" + GlooReleaseName = "gloo" KnativeServingNamespace = "knative-serving" + // This annotation is present on resources that are included in the chart only to clean up hooks. + // We use it to filter out those resources wherever that it necessary. + HookCleanupResourceAnnotation = "solo.io/hook-cleanup" ) diff --git a/projects/gloo/cli/pkg/flagutils/install.go b/projects/gloo/cli/pkg/flagutils/install.go index 010d0706311..11874ea6f12 100644 --- a/projects/gloo/cli/pkg/flagutils/install.go +++ b/projects/gloo/cli/pkg/flagutils/install.go @@ -2,6 +2,7 @@ package flagutils import ( "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" "github.com/solo-io/gloo/projects/gloo/pkg/defaults" "github.com/spf13/pflag" ) @@ -11,6 +12,7 @@ func AddInstallFlags(set *pflag.FlagSet, install *options.Install) { set.BoolVarP(&install.Upgrade, "upgrade", "u", false, "Upgrade an existing v1 gateway installation to use v2 CRDs. Set this when upgrading from v0.17.x or earlier versions of gloo") set.StringVarP(&install.HelmChartOverride, "file", "f", "", "Install Gloo from this Helm chart archive file rather than from a release") set.StringSliceVarP(&install.HelmChartValueFileNames, "values", "", []string{}, "List of files with value overrides for the Gloo Helm chart, (e.g. --values file1,file2 or --values file1 --values file2)") + set.StringVar(&install.HelmReleaseName, "release-name", constants.GlooReleaseName, "helm release name") set.StringVarP(&install.Namespace, "namespace", "n", defaults.GlooSystem, "namespace to install gloo into") set.BoolVar(&install.WithUi, "with-admin-console", false, "install gloo and a read-only version of its admin console") } diff --git a/projects/gloo/cli/pkg/flagutils/uninstall.go b/projects/gloo/cli/pkg/flagutils/uninstall.go index 9bf760d5b88..1b6e3babd39 100644 --- a/projects/gloo/cli/pkg/flagutils/uninstall.go +++ b/projects/gloo/cli/pkg/flagutils/uninstall.go @@ -2,14 +2,15 @@ package flagutils import ( "github.com/solo-io/gloo/projects/gloo/cli/pkg/cmd/options" + "github.com/solo-io/gloo/projects/gloo/cli/pkg/constants" "github.com/solo-io/gloo/projects/gloo/pkg/defaults" "github.com/spf13/pflag" ) func AddUninstallFlags(set *pflag.FlagSet, opts *options.Uninstall) { set.StringVarP(&opts.Namespace, "namespace", "n", defaults.GlooSystem, "namespace in which Gloo is installed") - set.BoolVar(&opts.DeleteNamespace, "delete-namespace", false, "Delete the namespace (all objects written to this namespace will be deleted)") + set.StringVar(&opts.HelmReleaseName, "release-name", constants.GlooReleaseName, "helm release name") set.BoolVar(&opts.DeleteCrds, "delete-crds", false, "Delete all gloo crds (all custom gloo objects will be deleted)") + set.BoolVar(&opts.DeleteNamespace, "delete-namespace", false, "Delete the namespace (all objects written to this namespace will be deleted)") set.BoolVar(&opts.DeleteAll, "all", false, "Deletes all gloo resources, including the namespace, crds, and cluster role") - set.BoolVar(&opts.Force, "force", false, "Uninstalls Gloo even if the installation ID cannot be determined from the gloo pod labels (using this may delete cluster-scoped resources belonging to other Gloo installations)") } diff --git a/projects/gloo/pkg/upstreams/consul/upstream_client_test.go b/projects/gloo/pkg/upstreams/consul/upstream_client_test.go index 33e4b90bfa0..59595913658 100644 --- a/projects/gloo/pkg/upstreams/consul/upstream_client_test.go +++ b/projects/gloo/pkg/upstreams/consul/upstream_client_test.go @@ -144,7 +144,7 @@ var _ = Describe("ConsulClient", func() { upstreamChan, errChan, err := usClient.Watch(defaults.GlooSystem, clients.WatchOpts{Ctx: ctx}) Expect(err).NotTo(HaveOccurred()) - Eventually(upstreamChan, 200*time.Millisecond).Should(Receive(ConsistOf( + Eventually(upstreamChan, 500*time.Millisecond).Should(Receive(ConsistOf( ToUpstream(&ServiceMeta{Name: "svc-1", DataCenters: []string{"dc1", "dc2"}}), ToUpstream(&ServiceMeta{Name: "svc-2", DataCenters: []string{"dc1"}}), ToUpstream(&ServiceMeta{Name: "svc-3", DataCenters: []string{"dc2"}}), @@ -210,7 +210,8 @@ var _ = Describe("ConsulClient", func() { upstreamChan, errChan, err := usClient.Watch(defaults.GlooSystem, clients.WatchOpts{Ctx: ctx}) Expect(err).NotTo(HaveOccurred()) - Eventually(upstreamChan, 200*time.Millisecond).Should(Receive(ConsistOf( + // The retry delay in the consul client is 100ms + Eventually(upstreamChan, 300*time.Millisecond).Should(Receive(ConsistOf( ToUpstream(&ServiceMeta{Name: "svc-1", DataCenters: []string{"dc1"}}), ToUpstream(&ServiceMeta{Name: "svc-2", DataCenters: []string{"dc1"}}), ))) @@ -275,7 +276,6 @@ var _ = Describe("ConsulClient", func() { type svcQueryFunc func(q *consulapi.QueryOptions) (map[string][]string, *consulapi.QueryMeta, error) func returnWithDelay(newIndex uint64, services []string, delay time.Duration) svcQueryFunc { - time.Sleep(delay) svcMap := make(map[string][]string, len(services)) for _, svc := range services { @@ -283,6 +283,7 @@ func returnWithDelay(newIndex uint64, services []string, delay time.Duration) sv } return func(q *consulapi.QueryOptions) (map[string][]string, *consulapi.QueryMeta, error) { + time.Sleep(delay) return svcMap, &consulapi.QueryMeta{LastIndex: newIndex}, nil } } diff --git a/projects/gloo/pkg/upstreams/consul/watcher.go b/projects/gloo/pkg/upstreams/consul/watcher.go index 99bf92eb9eb..0120f65d8e8 100644 --- a/projects/gloo/pkg/upstreams/consul/watcher.go +++ b/projects/gloo/pkg/upstreams/consul/watcher.go @@ -139,8 +139,9 @@ func (c *consulWatcher) watchServicesInDataCenter(ctx context.Context, dataCente return err }, - retry.Attempts(5), - retry.Delay(1*time.Second), + retry.Attempts(6), + // Last delay is 2^6 * 100ms = 3.2s + retry.Delay(100*time.Millisecond), retry.DelayType(retry.BackOffDelay), ) diff --git a/projects/ingress/pkg/setup/setup_syncer.go b/projects/ingress/pkg/setup/setup_syncer.go index 44ac5026050..03f5755270b 100644 --- a/projects/ingress/pkg/setup/setup_syncer.go +++ b/projects/ingress/pkg/setup/setup_syncer.go @@ -6,7 +6,7 @@ import ( "strconv" "strings" - "knative.dev/serving/pkg/network" + "knative.dev/pkg/network" clusteringressclient "github.com/solo-io/gloo/projects/clusteringress/pkg/api/custom/knative" @@ -238,7 +238,7 @@ func RunIngress(opts Opts) error { opts.ClusterIngressProxyAddress, opts.WriteNamespace, proxyClient, - knative.NetworkingV1alpha1().ClusterIngresses(), + knative.NetworkingV1alpha1(), writeErrs, ) clusterIngTranslatorEventLoop := clusteringressv1.NewTranslatorEventLoop(clusterIngTranslatorEmitter, clusterIngTranslatorSync) diff --git a/projects/knative/pkg/translator/translate.go b/projects/knative/pkg/translator/translate.go index a932b05fe6b..a28b3e1ed3e 100644 --- a/projects/knative/pkg/translator/translate.go +++ b/projects/knative/pkg/translator/translate.go @@ -8,12 +8,12 @@ import ( "strings" "time" + "knative.dev/pkg/network" + "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/core/matchers" v1 "k8s.io/api/core/v1" v1alpha1 "github.com/solo-io/gloo/projects/knative/pkg/api/external/knative" - "knative.dev/serving/pkg/network" - "github.com/solo-io/go-utils/contextutils" "github.com/solo-io/gloo/projects/gloo/pkg/api/v1/options/headers" diff --git a/test/kube2e/gateway/gateway_suite_test.go b/test/kube2e/gateway/gateway_suite_test.go index 9f397b7827d..4b2f56d747c 100644 --- a/test/kube2e/gateway/gateway_suite_test.go +++ b/test/kube2e/gateway/gateway_suite_test.go @@ -8,6 +8,9 @@ import ( "testing" "time" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "github.com/solo-io/gloo/projects/gloo/pkg/api/v1" "github.com/solo-io/gloo/pkg/cliutil/install" @@ -81,6 +84,12 @@ func StartTestHelper() { valueOverrideFile, cleanupFunc := getHelmValuesOverrideFile() defer cleanupFunc() + // Create namespace + _, err = clienthelpers.MustKubeClient().CoreV1().Namespaces().Create(&corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{Name: testHelper.InstallNamespace}, + }) + Expect(err).NotTo(HaveOccurred()) + err = testHelper.InstallGloo(helper.GATEWAY, 5*time.Minute, helper.ExtraArgs("--values", valueOverrideFile)) Expect(err).NotTo(HaveOccurred()) diff --git a/test/kube2e/ingress/ingress_suite_test.go b/test/kube2e/ingress/ingress_suite_test.go index 5261e6850e6..9976200125b 100644 --- a/test/kube2e/ingress/ingress_suite_test.go +++ b/test/kube2e/ingress/ingress_suite_test.go @@ -1,11 +1,16 @@ package ingress_test import ( + "fmt" "os" "path/filepath" "testing" "time" + clienthelpers "github.com/solo-io/gloo/projects/gloo/cli/pkg/helpers" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/solo-io/gloo/test/helpers" "github.com/avast/retry-go" @@ -43,9 +48,11 @@ var _ = BeforeSuite(func() { cwd, err := os.Getwd() Expect(err).NotTo(HaveOccurred()) + randomNumber := time.Now().Unix() % 10000 testHelper, err = helper.NewSoloTestHelper(func(defaults helper.TestConfig) helper.TestConfig { defaults.RootDir = filepath.Join(cwd, "../../..") defaults.HelmChartName = "gloo" + defaults.InstallNamespace = "ingress-test-" + fmt.Sprintf("%d-%d", randomNumber, GinkgoParallelNode()) return defaults }) Expect(err).NotTo(HaveOccurred()) @@ -57,6 +64,12 @@ var _ = BeforeSuite(func() { Expect(err).NotTo(HaveOccurred()) Expect(locker.AcquireLock(retry.Attempts(40))).NotTo(HaveOccurred()) + // Create namespace + _, err = clienthelpers.MustKubeClient().CoreV1().Namespaces().Create(&corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{Name: testHelper.InstallNamespace}, + }) + Expect(err).NotTo(HaveOccurred()) + // Install Gloo err = testHelper.InstallGloo(helper.INGRESS, 5*time.Minute) Expect(err).NotTo(HaveOccurred()) diff --git a/test/kube2e/knative/knative_suite_test.go b/test/kube2e/knative/knative_suite_test.go index e48c40970e4..2cda1c6b6be 100644 --- a/test/kube2e/knative/knative_suite_test.go +++ b/test/kube2e/knative/knative_suite_test.go @@ -1,11 +1,16 @@ package knative_test import ( + "fmt" "os" "path/filepath" "testing" "time" + clienthelpers "github.com/solo-io/gloo/projects/gloo/cli/pkg/helpers" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/solo-io/gloo/test/helpers" "github.com/avast/retry-go" @@ -44,9 +49,11 @@ var _ = BeforeSuite(func() { cwd, err := os.Getwd() Expect(err).NotTo(HaveOccurred()) + randomNumber := time.Now().Unix() % 10000 testHelper, err = helper.NewSoloTestHelper(func(defaults helper.TestConfig) helper.TestConfig { defaults.RootDir = filepath.Join(cwd, "../../..") defaults.HelmChartName = "gloo" + defaults.InstallNamespace = "knative-test-" + fmt.Sprintf("%d-%d", randomNumber, GinkgoParallelNode()) return defaults }) Expect(err).NotTo(HaveOccurred()) @@ -58,6 +65,12 @@ var _ = BeforeSuite(func() { Expect(err).NotTo(HaveOccurred()) Expect(locker.AcquireLock(retry.Attempts(40))).NotTo(HaveOccurred()) + // Create namespace + _, err = clienthelpers.MustKubeClient().CoreV1().Namespaces().Create(&corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{Name: testHelper.InstallNamespace}, + }) + Expect(err).NotTo(HaveOccurred()) + // Install Gloo err = testHelper.InstallGloo(helper.KNATIVE, 5*time.Minute) Expect(err).NotTo(HaveOccurred()) diff --git a/test/mocks/kubernetes/kubeinterface.go b/test/mocks/kubernetes/kubeinterface.go index cc0578485e6..9f570a082de 100644 --- a/test/mocks/kubernetes/kubeinterface.go +++ b/test/mocks/kubernetes/kubeinterface.go @@ -9,38 +9,44 @@ import ( gomock "github.com/golang/mock/gomock" discovery "k8s.io/client-go/discovery" - v1alpha1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1" + v1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1" v1beta1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1" - v1 "k8s.io/client-go/kubernetes/typed/apps/v1" + v10 "k8s.io/client-go/kubernetes/typed/apps/v1" v1beta10 "k8s.io/client-go/kubernetes/typed/apps/v1beta1" v1beta2 "k8s.io/client-go/kubernetes/typed/apps/v1beta2" - v1alpha10 "k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1" - v10 "k8s.io/client-go/kubernetes/typed/authentication/v1" + v1alpha1 "k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1" + v11 "k8s.io/client-go/kubernetes/typed/authentication/v1" v1beta11 "k8s.io/client-go/kubernetes/typed/authentication/v1beta1" - v11 "k8s.io/client-go/kubernetes/typed/authorization/v1" + v12 "k8s.io/client-go/kubernetes/typed/authorization/v1" v1beta12 "k8s.io/client-go/kubernetes/typed/authorization/v1beta1" - v12 "k8s.io/client-go/kubernetes/typed/autoscaling/v1" + v13 "k8s.io/client-go/kubernetes/typed/autoscaling/v1" v2beta1 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1" v2beta2 "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2" - v13 "k8s.io/client-go/kubernetes/typed/batch/v1" + v14 "k8s.io/client-go/kubernetes/typed/batch/v1" v1beta13 "k8s.io/client-go/kubernetes/typed/batch/v1beta1" v2alpha1 "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" v1beta14 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" + v15 "k8s.io/client-go/kubernetes/typed/coordination/v1" v1beta15 "k8s.io/client-go/kubernetes/typed/coordination/v1beta1" - v14 "k8s.io/client-go/kubernetes/typed/core/v1" + v16 "k8s.io/client-go/kubernetes/typed/core/v1" + v1alpha10 "k8s.io/client-go/kubernetes/typed/discovery/v1alpha1" v1beta16 "k8s.io/client-go/kubernetes/typed/events/v1beta1" v1beta17 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" - v15 "k8s.io/client-go/kubernetes/typed/networking/v1" - v1beta18 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" - v16 "k8s.io/client-go/kubernetes/typed/rbac/v1" - v1alpha11 "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1" - v1beta19 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1" - v1alpha12 "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1" - v1beta110 "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1" - v1alpha13 "k8s.io/client-go/kubernetes/typed/settings/v1alpha1" - v17 "k8s.io/client-go/kubernetes/typed/storage/v1" - v1alpha14 "k8s.io/client-go/kubernetes/typed/storage/v1alpha1" - v1beta111 "k8s.io/client-go/kubernetes/typed/storage/v1beta1" + v17 "k8s.io/client-go/kubernetes/typed/networking/v1" + v1beta18 "k8s.io/client-go/kubernetes/typed/networking/v1beta1" + v1alpha11 "k8s.io/client-go/kubernetes/typed/node/v1alpha1" + v1beta19 "k8s.io/client-go/kubernetes/typed/node/v1beta1" + v1beta110 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" + v18 "k8s.io/client-go/kubernetes/typed/rbac/v1" + v1alpha12 "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1" + v1beta111 "k8s.io/client-go/kubernetes/typed/rbac/v1beta1" + v19 "k8s.io/client-go/kubernetes/typed/scheduling/v1" + v1alpha13 "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1" + v1beta112 "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1" + v1alpha14 "k8s.io/client-go/kubernetes/typed/settings/v1alpha1" + v110 "k8s.io/client-go/kubernetes/typed/storage/v1" + v1alpha15 "k8s.io/client-go/kubernetes/typed/storage/v1alpha1" + v1beta113 "k8s.io/client-go/kubernetes/typed/storage/v1beta1" ) // MockInterface is a mock of Interface interface @@ -66,32 +72,18 @@ func (m *MockInterface) EXPECT() *MockInterfaceMockRecorder { return m.recorder } -// Admissionregistration mocks base method -func (m *MockInterface) Admissionregistration() v1beta1.AdmissionregistrationV1beta1Interface { +// AdmissionregistrationV1 mocks base method +func (m *MockInterface) AdmissionregistrationV1() v1.AdmissionregistrationV1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Admissionregistration") - ret0, _ := ret[0].(v1beta1.AdmissionregistrationV1beta1Interface) - return ret0 -} - -// Admissionregistration indicates an expected call of Admissionregistration -func (mr *MockInterfaceMockRecorder) Admissionregistration() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Admissionregistration", reflect.TypeOf((*MockInterface)(nil).Admissionregistration)) -} - -// AdmissionregistrationV1alpha1 mocks base method -func (m *MockInterface) AdmissionregistrationV1alpha1() v1alpha1.AdmissionregistrationV1alpha1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AdmissionregistrationV1alpha1") - ret0, _ := ret[0].(v1alpha1.AdmissionregistrationV1alpha1Interface) + ret := m.ctrl.Call(m, "AdmissionregistrationV1") + ret0, _ := ret[0].(v1.AdmissionregistrationV1Interface) return ret0 } -// AdmissionregistrationV1alpha1 indicates an expected call of AdmissionregistrationV1alpha1 -func (mr *MockInterfaceMockRecorder) AdmissionregistrationV1alpha1() *gomock.Call { +// AdmissionregistrationV1 indicates an expected call of AdmissionregistrationV1 +func (mr *MockInterfaceMockRecorder) AdmissionregistrationV1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AdmissionregistrationV1alpha1", reflect.TypeOf((*MockInterface)(nil).AdmissionregistrationV1alpha1)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AdmissionregistrationV1", reflect.TypeOf((*MockInterface)(nil).AdmissionregistrationV1)) } // AdmissionregistrationV1beta1 mocks base method @@ -108,25 +100,11 @@ func (mr *MockInterfaceMockRecorder) AdmissionregistrationV1beta1() *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AdmissionregistrationV1beta1", reflect.TypeOf((*MockInterface)(nil).AdmissionregistrationV1beta1)) } -// Apps mocks base method -func (m *MockInterface) Apps() v1.AppsV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Apps") - ret0, _ := ret[0].(v1.AppsV1Interface) - return ret0 -} - -// Apps indicates an expected call of Apps -func (mr *MockInterfaceMockRecorder) Apps() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Apps", reflect.TypeOf((*MockInterface)(nil).Apps)) -} - // AppsV1 mocks base method -func (m *MockInterface) AppsV1() v1.AppsV1Interface { +func (m *MockInterface) AppsV1() v10.AppsV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AppsV1") - ret0, _ := ret[0].(v1.AppsV1Interface) + ret0, _ := ret[0].(v10.AppsV1Interface) return ret0 } @@ -164,25 +142,11 @@ func (mr *MockInterfaceMockRecorder) AppsV1beta2() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AppsV1beta2", reflect.TypeOf((*MockInterface)(nil).AppsV1beta2)) } -// Auditregistration mocks base method -func (m *MockInterface) Auditregistration() v1alpha10.AuditregistrationV1alpha1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Auditregistration") - ret0, _ := ret[0].(v1alpha10.AuditregistrationV1alpha1Interface) - return ret0 -} - -// Auditregistration indicates an expected call of Auditregistration -func (mr *MockInterfaceMockRecorder) Auditregistration() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Auditregistration", reflect.TypeOf((*MockInterface)(nil).Auditregistration)) -} - // AuditregistrationV1alpha1 mocks base method -func (m *MockInterface) AuditregistrationV1alpha1() v1alpha10.AuditregistrationV1alpha1Interface { +func (m *MockInterface) AuditregistrationV1alpha1() v1alpha1.AuditregistrationV1alpha1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AuditregistrationV1alpha1") - ret0, _ := ret[0].(v1alpha10.AuditregistrationV1alpha1Interface) + ret0, _ := ret[0].(v1alpha1.AuditregistrationV1alpha1Interface) return ret0 } @@ -192,25 +156,11 @@ func (mr *MockInterfaceMockRecorder) AuditregistrationV1alpha1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuditregistrationV1alpha1", reflect.TypeOf((*MockInterface)(nil).AuditregistrationV1alpha1)) } -// Authentication mocks base method -func (m *MockInterface) Authentication() v10.AuthenticationV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Authentication") - ret0, _ := ret[0].(v10.AuthenticationV1Interface) - return ret0 -} - -// Authentication indicates an expected call of Authentication -func (mr *MockInterfaceMockRecorder) Authentication() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Authentication", reflect.TypeOf((*MockInterface)(nil).Authentication)) -} - // AuthenticationV1 mocks base method -func (m *MockInterface) AuthenticationV1() v10.AuthenticationV1Interface { +func (m *MockInterface) AuthenticationV1() v11.AuthenticationV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AuthenticationV1") - ret0, _ := ret[0].(v10.AuthenticationV1Interface) + ret0, _ := ret[0].(v11.AuthenticationV1Interface) return ret0 } @@ -234,25 +184,11 @@ func (mr *MockInterfaceMockRecorder) AuthenticationV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthenticationV1beta1", reflect.TypeOf((*MockInterface)(nil).AuthenticationV1beta1)) } -// Authorization mocks base method -func (m *MockInterface) Authorization() v11.AuthorizationV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Authorization") - ret0, _ := ret[0].(v11.AuthorizationV1Interface) - return ret0 -} - -// Authorization indicates an expected call of Authorization -func (mr *MockInterfaceMockRecorder) Authorization() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Authorization", reflect.TypeOf((*MockInterface)(nil).Authorization)) -} - // AuthorizationV1 mocks base method -func (m *MockInterface) AuthorizationV1() v11.AuthorizationV1Interface { +func (m *MockInterface) AuthorizationV1() v12.AuthorizationV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AuthorizationV1") - ret0, _ := ret[0].(v11.AuthorizationV1Interface) + ret0, _ := ret[0].(v12.AuthorizationV1Interface) return ret0 } @@ -276,25 +212,11 @@ func (mr *MockInterfaceMockRecorder) AuthorizationV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthorizationV1beta1", reflect.TypeOf((*MockInterface)(nil).AuthorizationV1beta1)) } -// Autoscaling mocks base method -func (m *MockInterface) Autoscaling() v12.AutoscalingV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Autoscaling") - ret0, _ := ret[0].(v12.AutoscalingV1Interface) - return ret0 -} - -// Autoscaling indicates an expected call of Autoscaling -func (mr *MockInterfaceMockRecorder) Autoscaling() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Autoscaling", reflect.TypeOf((*MockInterface)(nil).Autoscaling)) -} - // AutoscalingV1 mocks base method -func (m *MockInterface) AutoscalingV1() v12.AutoscalingV1Interface { +func (m *MockInterface) AutoscalingV1() v13.AutoscalingV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AutoscalingV1") - ret0, _ := ret[0].(v12.AutoscalingV1Interface) + ret0, _ := ret[0].(v13.AutoscalingV1Interface) return ret0 } @@ -332,25 +254,11 @@ func (mr *MockInterfaceMockRecorder) AutoscalingV2beta2() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AutoscalingV2beta2", reflect.TypeOf((*MockInterface)(nil).AutoscalingV2beta2)) } -// Batch mocks base method -func (m *MockInterface) Batch() v13.BatchV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Batch") - ret0, _ := ret[0].(v13.BatchV1Interface) - return ret0 -} - -// Batch indicates an expected call of Batch -func (mr *MockInterfaceMockRecorder) Batch() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Batch", reflect.TypeOf((*MockInterface)(nil).Batch)) -} - // BatchV1 mocks base method -func (m *MockInterface) BatchV1() v13.BatchV1Interface { +func (m *MockInterface) BatchV1() v14.BatchV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "BatchV1") - ret0, _ := ret[0].(v13.BatchV1Interface) + ret0, _ := ret[0].(v14.BatchV1Interface) return ret0 } @@ -388,20 +296,6 @@ func (mr *MockInterfaceMockRecorder) BatchV2alpha1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchV2alpha1", reflect.TypeOf((*MockInterface)(nil).BatchV2alpha1)) } -// Certificates mocks base method -func (m *MockInterface) Certificates() v1beta14.CertificatesV1beta1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Certificates") - ret0, _ := ret[0].(v1beta14.CertificatesV1beta1Interface) - return ret0 -} - -// Certificates indicates an expected call of Certificates -func (mr *MockInterfaceMockRecorder) Certificates() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Certificates", reflect.TypeOf((*MockInterface)(nil).Certificates)) -} - // CertificatesV1beta1 mocks base method func (m *MockInterface) CertificatesV1beta1() v1beta14.CertificatesV1beta1Interface { m.ctrl.T.Helper() @@ -416,18 +310,18 @@ func (mr *MockInterfaceMockRecorder) CertificatesV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CertificatesV1beta1", reflect.TypeOf((*MockInterface)(nil).CertificatesV1beta1)) } -// Coordination mocks base method -func (m *MockInterface) Coordination() v1beta15.CoordinationV1beta1Interface { +// CoordinationV1 mocks base method +func (m *MockInterface) CoordinationV1() v15.CoordinationV1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Coordination") - ret0, _ := ret[0].(v1beta15.CoordinationV1beta1Interface) + ret := m.ctrl.Call(m, "CoordinationV1") + ret0, _ := ret[0].(v15.CoordinationV1Interface) return ret0 } -// Coordination indicates an expected call of Coordination -func (mr *MockInterfaceMockRecorder) Coordination() *gomock.Call { +// CoordinationV1 indicates an expected call of CoordinationV1 +func (mr *MockInterfaceMockRecorder) CoordinationV1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Coordination", reflect.TypeOf((*MockInterface)(nil).Coordination)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CoordinationV1", reflect.TypeOf((*MockInterface)(nil).CoordinationV1)) } // CoordinationV1beta1 mocks base method @@ -444,25 +338,11 @@ func (mr *MockInterfaceMockRecorder) CoordinationV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CoordinationV1beta1", reflect.TypeOf((*MockInterface)(nil).CoordinationV1beta1)) } -// Core mocks base method -func (m *MockInterface) Core() v14.CoreV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Core") - ret0, _ := ret[0].(v14.CoreV1Interface) - return ret0 -} - -// Core indicates an expected call of Core -func (mr *MockInterfaceMockRecorder) Core() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Core", reflect.TypeOf((*MockInterface)(nil).Core)) -} - // CoreV1 mocks base method -func (m *MockInterface) CoreV1() v14.CoreV1Interface { +func (m *MockInterface) CoreV1() v16.CoreV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CoreV1") - ret0, _ := ret[0].(v14.CoreV1Interface) + ret0, _ := ret[0].(v16.CoreV1Interface) return ret0 } @@ -486,18 +366,18 @@ func (mr *MockInterfaceMockRecorder) Discovery() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Discovery", reflect.TypeOf((*MockInterface)(nil).Discovery)) } -// Events mocks base method -func (m *MockInterface) Events() v1beta16.EventsV1beta1Interface { +// DiscoveryV1alpha1 mocks base method +func (m *MockInterface) DiscoveryV1alpha1() v1alpha10.DiscoveryV1alpha1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Events") - ret0, _ := ret[0].(v1beta16.EventsV1beta1Interface) + ret := m.ctrl.Call(m, "DiscoveryV1alpha1") + ret0, _ := ret[0].(v1alpha10.DiscoveryV1alpha1Interface) return ret0 } -// Events indicates an expected call of Events -func (mr *MockInterfaceMockRecorder) Events() *gomock.Call { +// DiscoveryV1alpha1 indicates an expected call of DiscoveryV1alpha1 +func (mr *MockInterfaceMockRecorder) DiscoveryV1alpha1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Events", reflect.TypeOf((*MockInterface)(nil).Events)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DiscoveryV1alpha1", reflect.TypeOf((*MockInterface)(nil).DiscoveryV1alpha1)) } // EventsV1beta1 mocks base method @@ -514,20 +394,6 @@ func (mr *MockInterfaceMockRecorder) EventsV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventsV1beta1", reflect.TypeOf((*MockInterface)(nil).EventsV1beta1)) } -// Extensions mocks base method -func (m *MockInterface) Extensions() v1beta17.ExtensionsV1beta1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Extensions") - ret0, _ := ret[0].(v1beta17.ExtensionsV1beta1Interface) - return ret0 -} - -// Extensions indicates an expected call of Extensions -func (mr *MockInterfaceMockRecorder) Extensions() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Extensions", reflect.TypeOf((*MockInterface)(nil).Extensions)) -} - // ExtensionsV1beta1 mocks base method func (m *MockInterface) ExtensionsV1beta1() v1beta17.ExtensionsV1beta1Interface { m.ctrl.T.Helper() @@ -542,81 +408,81 @@ func (mr *MockInterfaceMockRecorder) ExtensionsV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExtensionsV1beta1", reflect.TypeOf((*MockInterface)(nil).ExtensionsV1beta1)) } -// Networking mocks base method -func (m *MockInterface) Networking() v15.NetworkingV1Interface { +// NetworkingV1 mocks base method +func (m *MockInterface) NetworkingV1() v17.NetworkingV1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Networking") - ret0, _ := ret[0].(v15.NetworkingV1Interface) + ret := m.ctrl.Call(m, "NetworkingV1") + ret0, _ := ret[0].(v17.NetworkingV1Interface) return ret0 } -// Networking indicates an expected call of Networking -func (mr *MockInterfaceMockRecorder) Networking() *gomock.Call { +// NetworkingV1 indicates an expected call of NetworkingV1 +func (mr *MockInterfaceMockRecorder) NetworkingV1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Networking", reflect.TypeOf((*MockInterface)(nil).Networking)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkingV1", reflect.TypeOf((*MockInterface)(nil).NetworkingV1)) } -// NetworkingV1 mocks base method -func (m *MockInterface) NetworkingV1() v15.NetworkingV1Interface { +// NetworkingV1beta1 mocks base method +func (m *MockInterface) NetworkingV1beta1() v1beta18.NetworkingV1beta1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetworkingV1") - ret0, _ := ret[0].(v15.NetworkingV1Interface) + ret := m.ctrl.Call(m, "NetworkingV1beta1") + ret0, _ := ret[0].(v1beta18.NetworkingV1beta1Interface) return ret0 } -// NetworkingV1 indicates an expected call of NetworkingV1 -func (mr *MockInterfaceMockRecorder) NetworkingV1() *gomock.Call { +// NetworkingV1beta1 indicates an expected call of NetworkingV1beta1 +func (mr *MockInterfaceMockRecorder) NetworkingV1beta1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkingV1", reflect.TypeOf((*MockInterface)(nil).NetworkingV1)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkingV1beta1", reflect.TypeOf((*MockInterface)(nil).NetworkingV1beta1)) } -// Policy mocks base method -func (m *MockInterface) Policy() v1beta18.PolicyV1beta1Interface { +// NodeV1alpha1 mocks base method +func (m *MockInterface) NodeV1alpha1() v1alpha11.NodeV1alpha1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Policy") - ret0, _ := ret[0].(v1beta18.PolicyV1beta1Interface) + ret := m.ctrl.Call(m, "NodeV1alpha1") + ret0, _ := ret[0].(v1alpha11.NodeV1alpha1Interface) return ret0 } -// Policy indicates an expected call of Policy -func (mr *MockInterfaceMockRecorder) Policy() *gomock.Call { +// NodeV1alpha1 indicates an expected call of NodeV1alpha1 +func (mr *MockInterfaceMockRecorder) NodeV1alpha1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Policy", reflect.TypeOf((*MockInterface)(nil).Policy)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeV1alpha1", reflect.TypeOf((*MockInterface)(nil).NodeV1alpha1)) } -// PolicyV1beta1 mocks base method -func (m *MockInterface) PolicyV1beta1() v1beta18.PolicyV1beta1Interface { +// NodeV1beta1 mocks base method +func (m *MockInterface) NodeV1beta1() v1beta19.NodeV1beta1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PolicyV1beta1") - ret0, _ := ret[0].(v1beta18.PolicyV1beta1Interface) + ret := m.ctrl.Call(m, "NodeV1beta1") + ret0, _ := ret[0].(v1beta19.NodeV1beta1Interface) return ret0 } -// PolicyV1beta1 indicates an expected call of PolicyV1beta1 -func (mr *MockInterfaceMockRecorder) PolicyV1beta1() *gomock.Call { +// NodeV1beta1 indicates an expected call of NodeV1beta1 +func (mr *MockInterfaceMockRecorder) NodeV1beta1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PolicyV1beta1", reflect.TypeOf((*MockInterface)(nil).PolicyV1beta1)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeV1beta1", reflect.TypeOf((*MockInterface)(nil).NodeV1beta1)) } -// Rbac mocks base method -func (m *MockInterface) Rbac() v16.RbacV1Interface { +// PolicyV1beta1 mocks base method +func (m *MockInterface) PolicyV1beta1() v1beta110.PolicyV1beta1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Rbac") - ret0, _ := ret[0].(v16.RbacV1Interface) + ret := m.ctrl.Call(m, "PolicyV1beta1") + ret0, _ := ret[0].(v1beta110.PolicyV1beta1Interface) return ret0 } -// Rbac indicates an expected call of Rbac -func (mr *MockInterfaceMockRecorder) Rbac() *gomock.Call { +// PolicyV1beta1 indicates an expected call of PolicyV1beta1 +func (mr *MockInterfaceMockRecorder) PolicyV1beta1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Rbac", reflect.TypeOf((*MockInterface)(nil).Rbac)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PolicyV1beta1", reflect.TypeOf((*MockInterface)(nil).PolicyV1beta1)) } // RbacV1 mocks base method -func (m *MockInterface) RbacV1() v16.RbacV1Interface { +func (m *MockInterface) RbacV1() v18.RbacV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "RbacV1") - ret0, _ := ret[0].(v16.RbacV1Interface) + ret0, _ := ret[0].(v18.RbacV1Interface) return ret0 } @@ -627,10 +493,10 @@ func (mr *MockInterfaceMockRecorder) RbacV1() *gomock.Call { } // RbacV1alpha1 mocks base method -func (m *MockInterface) RbacV1alpha1() v1alpha11.RbacV1alpha1Interface { +func (m *MockInterface) RbacV1alpha1() v1alpha12.RbacV1alpha1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "RbacV1alpha1") - ret0, _ := ret[0].(v1alpha11.RbacV1alpha1Interface) + ret0, _ := ret[0].(v1alpha12.RbacV1alpha1Interface) return ret0 } @@ -641,10 +507,10 @@ func (mr *MockInterfaceMockRecorder) RbacV1alpha1() *gomock.Call { } // RbacV1beta1 mocks base method -func (m *MockInterface) RbacV1beta1() v1beta19.RbacV1beta1Interface { +func (m *MockInterface) RbacV1beta1() v1beta111.RbacV1beta1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "RbacV1beta1") - ret0, _ := ret[0].(v1beta19.RbacV1beta1Interface) + ret0, _ := ret[0].(v1beta111.RbacV1beta1Interface) return ret0 } @@ -654,25 +520,25 @@ func (mr *MockInterfaceMockRecorder) RbacV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RbacV1beta1", reflect.TypeOf((*MockInterface)(nil).RbacV1beta1)) } -// Scheduling mocks base method -func (m *MockInterface) Scheduling() v1beta110.SchedulingV1beta1Interface { +// SchedulingV1 mocks base method +func (m *MockInterface) SchedulingV1() v19.SchedulingV1Interface { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Scheduling") - ret0, _ := ret[0].(v1beta110.SchedulingV1beta1Interface) + ret := m.ctrl.Call(m, "SchedulingV1") + ret0, _ := ret[0].(v19.SchedulingV1Interface) return ret0 } -// Scheduling indicates an expected call of Scheduling -func (mr *MockInterfaceMockRecorder) Scheduling() *gomock.Call { +// SchedulingV1 indicates an expected call of SchedulingV1 +func (mr *MockInterfaceMockRecorder) SchedulingV1() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Scheduling", reflect.TypeOf((*MockInterface)(nil).Scheduling)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SchedulingV1", reflect.TypeOf((*MockInterface)(nil).SchedulingV1)) } // SchedulingV1alpha1 mocks base method -func (m *MockInterface) SchedulingV1alpha1() v1alpha12.SchedulingV1alpha1Interface { +func (m *MockInterface) SchedulingV1alpha1() v1alpha13.SchedulingV1alpha1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SchedulingV1alpha1") - ret0, _ := ret[0].(v1alpha12.SchedulingV1alpha1Interface) + ret0, _ := ret[0].(v1alpha13.SchedulingV1alpha1Interface) return ret0 } @@ -683,10 +549,10 @@ func (mr *MockInterfaceMockRecorder) SchedulingV1alpha1() *gomock.Call { } // SchedulingV1beta1 mocks base method -func (m *MockInterface) SchedulingV1beta1() v1beta110.SchedulingV1beta1Interface { +func (m *MockInterface) SchedulingV1beta1() v1beta112.SchedulingV1beta1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SchedulingV1beta1") - ret0, _ := ret[0].(v1beta110.SchedulingV1beta1Interface) + ret0, _ := ret[0].(v1beta112.SchedulingV1beta1Interface) return ret0 } @@ -696,25 +562,11 @@ func (mr *MockInterfaceMockRecorder) SchedulingV1beta1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SchedulingV1beta1", reflect.TypeOf((*MockInterface)(nil).SchedulingV1beta1)) } -// Settings mocks base method -func (m *MockInterface) Settings() v1alpha13.SettingsV1alpha1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Settings") - ret0, _ := ret[0].(v1alpha13.SettingsV1alpha1Interface) - return ret0 -} - -// Settings indicates an expected call of Settings -func (mr *MockInterfaceMockRecorder) Settings() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Settings", reflect.TypeOf((*MockInterface)(nil).Settings)) -} - // SettingsV1alpha1 mocks base method -func (m *MockInterface) SettingsV1alpha1() v1alpha13.SettingsV1alpha1Interface { +func (m *MockInterface) SettingsV1alpha1() v1alpha14.SettingsV1alpha1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SettingsV1alpha1") - ret0, _ := ret[0].(v1alpha13.SettingsV1alpha1Interface) + ret0, _ := ret[0].(v1alpha14.SettingsV1alpha1Interface) return ret0 } @@ -724,25 +576,11 @@ func (mr *MockInterfaceMockRecorder) SettingsV1alpha1() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SettingsV1alpha1", reflect.TypeOf((*MockInterface)(nil).SettingsV1alpha1)) } -// Storage mocks base method -func (m *MockInterface) Storage() v17.StorageV1Interface { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Storage") - ret0, _ := ret[0].(v17.StorageV1Interface) - return ret0 -} - -// Storage indicates an expected call of Storage -func (mr *MockInterfaceMockRecorder) Storage() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Storage", reflect.TypeOf((*MockInterface)(nil).Storage)) -} - // StorageV1 mocks base method -func (m *MockInterface) StorageV1() v17.StorageV1Interface { +func (m *MockInterface) StorageV1() v110.StorageV1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "StorageV1") - ret0, _ := ret[0].(v17.StorageV1Interface) + ret0, _ := ret[0].(v110.StorageV1Interface) return ret0 } @@ -753,10 +591,10 @@ func (mr *MockInterfaceMockRecorder) StorageV1() *gomock.Call { } // StorageV1alpha1 mocks base method -func (m *MockInterface) StorageV1alpha1() v1alpha14.StorageV1alpha1Interface { +func (m *MockInterface) StorageV1alpha1() v1alpha15.StorageV1alpha1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "StorageV1alpha1") - ret0, _ := ret[0].(v1alpha14.StorageV1alpha1Interface) + ret0, _ := ret[0].(v1alpha15.StorageV1alpha1Interface) return ret0 } @@ -767,10 +605,10 @@ func (mr *MockInterfaceMockRecorder) StorageV1alpha1() *gomock.Call { } // StorageV1beta1 mocks base method -func (m *MockInterface) StorageV1beta1() v1beta111.StorageV1beta1Interface { +func (m *MockInterface) StorageV1beta1() v1beta113.StorageV1beta1Interface { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "StorageV1beta1") - ret0, _ := ret[0].(v1beta111.StorageV1beta1Interface) + ret0, _ := ret[0].(v1beta113.StorageV1beta1Interface) return ret0 }