From 7c6f6f922110946ab5435ee8c9563f5aaed9882b Mon Sep 17 00:00:00 2001 From: Matthew Wong Date: Wed, 24 Jul 2019 10:48:55 -0700 Subject: [PATCH] Run upstream e2e tests --- Makefile | 4 + hack/run-e2e-test | 119 ++++ test/e2e/Gopkg.lock | 1325 ++++++++++++++++++++++++++++++++++++++++++ test/e2e/Gopkg.toml | 40 ++ test/e2e/README.md | 13 + test/e2e/e2e_test.go | 140 +++++ test/e2e/go.mod | 0 7 files changed, 1641 insertions(+) create mode 100755 hack/run-e2e-test create mode 100644 test/e2e/Gopkg.lock create mode 100644 test/e2e/Gopkg.toml create mode 100644 test/e2e/README.md create mode 100644 test/e2e/e2e_test.go create mode 100644 test/e2e/go.mod diff --git a/Makefile b/Makefile index 0e610cbed..f7da3c9f3 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,10 @@ verify: test: go test -v -race ./pkg/... +.PHONY: test-e2e +test-e2e: + AWS_REGION=us-west-2 AWS_AVAILABILITY_ZONES=us-west-2a,us-west-2b,us-west-2c ./hack/run-e2e-test + .PHONY: image image: docker build -t $(IMAGE):latest . diff --git a/hack/run-e2e-test b/hack/run-e2e-test new file mode 100755 index 000000000..40908c0ce --- /dev/null +++ b/hack/run-e2e-test @@ -0,0 +1,119 @@ +#!/bin/bash + +# Copyright 2019 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -uo pipefail + +OS_ARCH=$(go env GOOS)-amd64 +TEST_ID=$RANDOM +CLUSTER_NAME=test-cluster-$TEST_ID +TEST_DIR=/tmp/efs-e2e-test +BASE_DIR=$(dirname $0) +REGION=${AWS_REGION-us-east-1} +ZONES=${AWS_AVAILABILITY_ZONES-us-east-1a,us-east-1b,us-east-1c} +K8S_VERSION=${K8S_VERSION-1.14.1} + +echo "Testing in region: $REGION and zones: $ZONES" + +KOPS_DOWNLOAD_URL=https://github.com/kubernetes/kops/releases/download/1.14.0-alpha.3/kops-$OS_ARCH +KOPS_PATH=$TEST_DIR/kops +KOPS_STATE_FILE=s3://k8s-kops-csi-e2e + +# Download kops if not yet +if [[ ! -e $KOPS_PATH ]]; then + mkdir -p $TEST_DIR + echo "Downloading KOPS from $KOPS_DOWNLOAD_URL to $KOPS_PATH" + curl -L -X GET $KOPS_DOWNLOAD_URL -o $KOPS_PATH + chmod +x $KOPS_PATH +fi + +echo "Creating cluster $CLUSTER_NAME" +CLUSTER_YAML_PATH=$TEST_DIR/$CLUSTER_NAME.yaml +SSH_KEY_PATH=$TEST_DIR/id_rsa +ssh-keygen -P csi-e2e -f $SSH_KEY_PATH + +$KOPS_PATH create cluster --state $KOPS_STATE_FILE \ + --zones $ZONES \ + --node-count=3 \ + --kubernetes-version=$K8S_VERSION \ + --ssh-public-key=$SSH_KEY_PATH.pub \ + $CLUSTER_NAME.k8s.local + $KOPS_PATH get cluster --state $KOPS_STATE_FILE $CLUSTER_NAME.k8s.local -o yaml > $CLUSTER_YAML_PATH + $KOPS_PATH replace --state $KOPS_STATE_FILE -f $CLUSTER_YAML_PATH + $KOPS_PATH update cluster --state $KOPS_STATE_FILE $CLUSTER_NAME.k8s.local --yes + +# Wait for cluster creation +while [[ 1 ]]; do + $KOPS_PATH validate cluster --state $KOPS_STATE_FILE + ret=$? + if [[ $ret -eq 0 ]]; then + break + else + echo "Waiting cluster to be created" + sleep 30 + fi +done; + +# Push test driver image +eval $(aws ecr get-login --region $REGION --no-include-email) +AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) +IMAGE_TAG=$TEST_ID +IMAGE_NAME=$AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/aws-efs-csi-driver +docker build -t $IMAGE_NAME:$IMAGE_TAG . +docker push $IMAGE_NAME:$IMAGE_TAG + +echo "Deploying driver" +cat deploy/kubernetes/manifest.yaml | sed s,amazon/aws-efs-csi-driver:latest,$IMAGE_NAME:$IMAGE_TAG, > $TEST_DIR/manifest.yaml +kubectl apply -f $TEST_DIR/manifest.yaml + +echo "Creating EFS file system" +aws efs create-file-system --creation-token $TEST_ID --tags Key=KubernetesCluster,Value=$CLUSTER_NAME.k8s.local --region $REGION +FILE_SYSTEM_ID=$(aws efs describe-file-systems --creation-token $TEST_ID --region $REGION | jq -r '.FileSystems[0].FileSystemId') + +GROUP_ID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=nodes.$CLUSTER_NAME.k8s.local --region $REGION | jq -r '.SecurityGroups[0].GroupId') +aws ec2 authorize-security-group-ingress --group-id $GROUP_ID --protocol tcp --port 2049 --source-group $GROUP_ID --region $REGION + +for zone in ${ZONES//,/ }; do + SUBNET_NAME=${zone}.$CLUSTER_NAME.k8s.local + SUBNET_ID=$(aws ec2 describe-subnets --filters Name=tag:Name,Values=$SUBNET_NAME --region $REGION | jq -r '.Subnets[0].SubnetId') + aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_ID --security-groups $GROUP_ID --region $REGION +done + +# Run the test +export KUBECONFIG=$HOME/.kube/config +pushd ./test/e2e && dep ensure && popd +GO111MODULE=off go test -v -timeout 0 ./test/e2e/... -kubeconfig=$HOME/.kube/config -ginkgo.skip="\[Disruptive\]" -file-system-id=$FILE_SYSTEM_ID +TEST_PASS=$? + +#echo "Deleting EFS file system" +MOUNT_TARGETS=$(aws efs describe-mount-targets --file-system-id $FILE_SYSTEM_ID --region us-east-1) +i=0 +for zone in ${ZONES//,/ }; do + aws efs delete-mount-target --mount-target-id $(echo $MOUNT_TARGETS | jq -r '.MountTargets['$i'].MountTargetId') --region $REGION + ((i++)) +done +until aws efs delete-file-system --file-system-id $FILE_SYSTEM_ID --region $REGION; do + echo "Deleting EFS file system" + sleep 5 +done; + +echo "Deleting cluster $CLUSTER_NAME" +$KOPS_PATH delete cluster --name $CLUSTER_NAME.k8s.local --state $KOPS_STATE_FILE --yes + +rm -rf $TEST_DIR + +if [[ $TEST_PASS -ne 0 ]]; then + exit 1 +fi diff --git a/test/e2e/Gopkg.lock b/test/e2e/Gopkg.lock new file mode 100644 index 000000000..d1a204437 --- /dev/null +++ b/test/e2e/Gopkg.lock @@ -0,0 +1,1325 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + digest = "1:f9ae348e1f793dcf9ed930ed47136a67343dbd6809c5c91391322267f4476892" + name = "github.com/Microsoft/go-winio" + packages = ["."] + pruneopts = "UT" + revision = "1a8911d1ed007260465c3bfbbc785ac6915a0bb8" + version = "v0.4.12" + +[[projects]] + digest = "1:a2682518d905d662d984ef9959984ef87cecb777d379bfa9d9fe40e78069b3e4" + name = "github.com/PuerkitoBio/purell" + packages = ["."] + pruneopts = "UT" + revision = "44968752391892e1b0d0b821ee79e9a85fa13049" + version = "v1.1.1" + +[[projects]] + branch = "master" + digest = "1:c739832d67eb1e9cc478a19cc1a1ccd78df0397bf8a32978b759152e205f644b" + name = "github.com/PuerkitoBio/urlesc" + packages = ["."] + pruneopts = "UT" + revision = "de5bf2ad457846296e2031421a34e2568e304e35" + +[[projects]] + digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d" + name = "github.com/beorn7/perks" + packages = ["quantile"] + pruneopts = "UT" + revision = "4b2b341e8d7715fae06375aa633dbb6e91b3fb46" + version = "v1.0.0" + +[[projects]] + digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec" + name = "github.com/davecgh/go-spew" + packages = ["spew"] + pruneopts = "UT" + revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" + version = "v1.1.1" + +[[projects]] + digest = "1:4ddc17aeaa82cb18c5f0a25d7c253a10682f518f4b2558a82869506eec223d76" + name = "github.com/docker/distribution" + packages = [ + "digestset", + "reference", + ] + pruneopts = "UT" + revision = "2461543d988979529609e8cb6fca9ca190dc48da" + version = "v2.7.1" + +[[projects]] + branch = "master" + digest = "1:ecdc8e0fe3bc7d549af1c9c36acf3820523b707d6c071b6d0c3860882c6f7b42" + name = "github.com/docker/spdystream" + packages = [ + ".", + "spdy", + ] + pruneopts = "UT" + revision = "6480d4af844c189cf5dd913db24ddd339d3a4f85" + +[[projects]] + digest = "1:b2754ad67d4ed5a0741d69396c6f5cbe1e426a8adc2e8e97e09a1ee5a4621653" + name = "github.com/emicklei/go-restful" + packages = [ + ".", + "log", + ] + pruneopts = "UT" + revision = "6ac3b8eb89d325e5c750d77f344a6870464d03c3" + version = "v2.9.6" + +[[projects]] + digest = "1:b48d19e79fa607e9e3715ff9a73cdd3777a9cac254b50b9af721466f687e850d" + name = "github.com/evanphx/json-patch" + packages = ["."] + pruneopts = "UT" + revision = "afac545df32f2287a079e2dfb7ba2745a643747e" + version = "v3.0.0" + +[[projects]] + digest = "1:bbc4aacabe6880bdbce849c64cb061b7eddf39f132af4ea2853ddd32f85fbec3" + name = "github.com/fatih/camelcase" + packages = ["."] + pruneopts = "UT" + revision = "44e46d280b43ec1531bb25252440e34f1b800b65" + version = "v1.0.0" + +[[projects]] + digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" + name = "github.com/fsnotify/fsnotify" + packages = ["."] + pruneopts = "UT" + revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" + version = "v1.4.7" + +[[projects]] + digest = "1:2cd7915ab26ede7d95b8749e6b1f933f1c6d5398030684e6505940a10f31cfda" + name = "github.com/ghodss/yaml" + packages = ["."] + pruneopts = "UT" + revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" + version = "v1.0.0" + +[[projects]] + digest = "1:3199d542cd80a8505e4cd90bb6c7d0bca8a67948834239053c78f9e20b8caa5f" + name = "github.com/go-openapi/jsonpointer" + packages = ["."] + pruneopts = "UT" + revision = "a105a905c5e6ad147f08504784917f3e178e0ba5" + version = "v0.19.2" + +[[projects]] + digest = "1:8b54a5c13b78b966644a9887433794034c14993a89ac93d532c587fc22d7f6bf" + name = "github.com/go-openapi/jsonreference" + packages = ["."] + pruneopts = "UT" + revision = "2903bfd4bfbaf188694f1edf731f2725a8fa344f" + version = "v0.19.2" + +[[projects]] + digest = "1:b1f97d0d316f90c2059f7bfee14855c314d65834a3b93f02856e01c1fb8fbebe" + name = "github.com/go-openapi/spec" + packages = ["."] + pruneopts = "UT" + revision = "bdfd7e07daecc404d77868a88b2364d0aed0ee5a" + version = "v0.19.2" + +[[projects]] + digest = "1:2de91ae845491f7158c1644a1183d2bbcc5a7bd668768b60a91519f848603dad" + name = "github.com/go-openapi/swag" + packages = ["."] + pruneopts = "UT" + revision = "de649ffb9e02183a414820c5b1b4582f7b009792" + version = "v0.19.4" + +[[projects]] + digest = "1:33f49b72fdad072a03d13b31a42edfff08088b7c27198f4073b8213a58884f27" + name = "github.com/gogo/protobuf" + packages = [ + "gogoproto", + "proto", + "protoc-gen-gogo/descriptor", + "sortkeys", + ] + pruneopts = "UT" + revision = "ba06b47c162d49f2af050fb4c75bcbc86a159d5c" + version = "v1.2.1" + +[[projects]] + branch = "master" + digest = "1:b7cb6054d3dff43b38ad2e92492f220f57ae6087ee797dca298139776749ace8" + name = "github.com/golang/groupcache" + packages = ["lru"] + pruneopts = "UT" + revision = "869f871628b6baa9cfbc11732cdf6546b17c1298" + +[[projects]] + digest = "1:f5ce1529abc1204444ec73779f44f94e2fa8fcdb7aca3c355b0c95947e4005c6" + name = "github.com/golang/protobuf" + packages = [ + "proto", + "ptypes", + "ptypes/any", + "ptypes/duration", + "ptypes/timestamp", + ] + pruneopts = "UT" + revision = "6c65a5562fc06764971b7c5d05c76c75e84bdbf7" + version = "v1.3.2" + +[[projects]] + digest = "1:0bfbe13936953a98ae3cfe8ed6670d396ad81edf069a806d2f6515d7bb6950df" + name = "github.com/google/btree" + packages = ["."] + pruneopts = "UT" + revision = "4030bb1f1f0c35b30ca7009e9ebd06849dd45306" + version = "v1.0.0" + +[[projects]] + digest = "1:bf40199583e5143d1472fc34d10d6f4b69d97572142acf343b3e43136da40823" + name = "github.com/google/go-cmp" + packages = [ + "cmp", + "cmp/internal/diff", + "cmp/internal/flags", + "cmp/internal/function", + "cmp/internal/value", + ] + pruneopts = "UT" + revision = "6f77996f0c42f7b84e5a2b252227263f93432e9b" + version = "v0.3.0" + +[[projects]] + digest = "1:a6181aca1fd5e27103f9a920876f29ac72854df7345a39f3b01e61c8c94cc8af" + name = "github.com/google/gofuzz" + packages = ["."] + pruneopts = "UT" + revision = "f140a6486e521aad38f5917de355cbf147cc0496" + version = "v1.0.0" + +[[projects]] + digest = "1:582b704bebaa06b48c29b0cec224a6058a09c86883aaddabde889cd1a5f73e1b" + name = "github.com/google/uuid" + packages = ["."] + pruneopts = "UT" + revision = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4" + version = "v1.1.1" + +[[projects]] + digest = "1:d1a3774c1f8336a21669d6da87a7bafb4d6171a84752268b7011e767d6722c2b" + name = "github.com/googleapis/gnostic" + packages = [ + "OpenAPIv2", + "compiler", + "extensions", + ] + pruneopts = "UT" + revision = "e73c7ec21d36ddb0711cb36d1502d18363b5c2c9" + version = "v0.3.0" + +[[projects]] + branch = "master" + digest = "1:5fc0e23b254a1bd7d8d2d42fa093ba33471d08f52fe04afd3713adabb5888dc3" + name = "github.com/gregjones/httpcache" + packages = [ + ".", + "diskcache", + ] + pruneopts = "UT" + revision = "901d90724c7919163f472a9812253fb26761123d" + +[[projects]] + digest = "1:d15ee511aa0f56baacc1eb4c6b922fa1c03b38413b6be18166b996d82a0156ea" + name = "github.com/hashicorp/golang-lru" + packages = [ + ".", + "simplelru", + ] + pruneopts = "UT" + revision = "7087cb70de9f7a8bc0a10c375cb0d2280a8edf9c" + version = "v0.5.1" + +[[projects]] + digest = "1:a1038ef593beb4771c8f0f9c26e8b00410acd800af5c6864651d9bf160ea1813" + name = "github.com/hpcloud/tail" + packages = [ + ".", + "ratelimiter", + "util", + "watch", + "winfile", + ] + pruneopts = "UT" + revision = "a30252cb686a21eb2d0b98132633053ec2f7f1e5" + version = "v1.0.0" + +[[projects]] + digest = "1:a0cefd27d12712af4b5018dc7046f245e1e3b5760e2e848c30b171b570708f9b" + name = "github.com/imdario/mergo" + packages = ["."] + pruneopts = "UT" + revision = "7c29201646fa3de8506f701213473dd407f19646" + version = "v0.3.7" + +[[projects]] + digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" + name = "github.com/inconshreveable/mousetrap" + packages = ["."] + pruneopts = "UT" + revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" + version = "v1.0" + +[[projects]] + digest = "1:f5a2051c55d05548d2d4fd23d244027b59fbd943217df8aa3b5e170ac2fd6e1b" + name = "github.com/json-iterator/go" + packages = ["."] + pruneopts = "UT" + revision = "0ff49de124c6f76f8494e194af75bde0f1a49a29" + version = "v1.1.6" + +[[projects]] + branch = "master" + digest = "1:927762c6729b4e72957ba3310e485ed09cf8451c5a637a52fd016a9fe09e7936" + name = "github.com/mailru/easyjson" + packages = [ + "buffer", + "jlexer", + "jwriter", + ] + pruneopts = "UT" + revision = "b2ccc519800e761ac8000b95e5d57c80a897ff9e" + +[[projects]] + digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc" + name = "github.com/matttproud/golang_protobuf_extensions" + packages = ["pbutil"] + pruneopts = "UT" + revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" + version = "v1.0.1" + +[[projects]] + digest = "1:33422d238f147d247752996a26574ac48dcf472976eda7f5134015f06bf16563" + name = "github.com/modern-go/concurrent" + packages = ["."] + pruneopts = "UT" + revision = "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94" + version = "1.0.3" + +[[projects]] + digest = "1:e32bdbdb7c377a07a9a46378290059822efdce5c8d96fe71940d87cb4f918855" + name = "github.com/modern-go/reflect2" + packages = ["."] + pruneopts = "UT" + revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd" + version = "1.0.1" + +[[projects]] + digest = "1:e9c3bb68a6c9470302b8046d4647e0612a2ea6037b9c6a47de60c0a90db504f8" + name = "github.com/onsi/ginkgo" + packages = [ + ".", + "config", + "internal/codelocation", + "internal/containernode", + "internal/failer", + "internal/leafnodes", + "internal/remote", + "internal/spec", + "internal/spec_iterator", + "internal/specrunner", + "internal/suite", + "internal/testingtproxy", + "internal/writer", + "reporters", + "reporters/stenographer", + "reporters/stenographer/support/go-colorable", + "reporters/stenographer/support/go-isatty", + "types", + ] + pruneopts = "UT" + revision = "eea6ad008b96acdaa524f5b409513bf062b500ad" + version = "v1.8.0" + +[[projects]] + digest = "1:fe167e8f858cbfc10c721f2000f2446140800bb53fa83c088e03d191275611a4" + name = "github.com/onsi/gomega" + packages = [ + ".", + "format", + "internal/assertion", + "internal/asyncassertion", + "internal/oraclematcher", + "internal/testingtsupport", + "matchers", + "matchers/support/goraph/bipartitegraph", + "matchers/support/goraph/edge", + "matchers/support/goraph/node", + "matchers/support/goraph/util", + "types", + ] + pruneopts = "UT" + revision = "90e289841c1ed79b7a598a7cd9959750cb5e89e2" + version = "v1.5.0" + +[[projects]] + digest = "1:ee4d4af67d93cc7644157882329023ce9a7bcfce956a079069a9405521c7cc8d" + name = "github.com/opencontainers/go-digest" + packages = ["."] + pruneopts = "UT" + revision = "279bed98673dd5bef374d3b6e4b09e2af76183bf" + version = "v1.0.0-rc1" + +[[projects]] + digest = "1:e5d0bd87abc2781d14e274807a470acd180f0499f8bf5bb18606e9ec22ad9de9" + name = "github.com/pborman/uuid" + packages = ["."] + pruneopts = "UT" + revision = "adf5a7427709b9deb95d29d3fa8a2bf9cfd388f1" + version = "v1.2" + +[[projects]] + branch = "master" + digest = "1:89da0f0574bc94cfd0ac8b59af67bf76cdd110d503df2721006b9f0492394333" + name = "github.com/petar/GoLLRB" + packages = ["llrb"] + pruneopts = "UT" + revision = "33fb24c13b99c46c93183c291836c573ac382536" + +[[projects]] + digest = "1:a8c2725121694dfbf6d552fb86fe6b46e3e7135ea05db580c28695b916162aad" + name = "github.com/peterbourgon/diskv" + packages = ["."] + pruneopts = "UT" + revision = "0be1b92a6df0e4f5cb0a5d15fb7f643d0ad93ce6" + version = "v3.0.0" + +[[projects]] + digest = "1:cf31692c14422fa27c83a05292eb5cbe0fb2775972e8f1f8446a71549bd8980b" + name = "github.com/pkg/errors" + packages = ["."] + pruneopts = "UT" + revision = "ba968bfe8b2f7e042a574c888954fccecfa385b4" + version = "v0.8.1" + +[[projects]] + digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe" + name = "github.com/pmezard/go-difflib" + packages = ["difflib"] + pruneopts = "UT" + revision = "792786c7400a136282c1664665ae0a8db921c6c2" + version = "v1.0.0" + +[[projects]] + digest = "1:7097829edd12fd7211fca0d29496b44f94ef9e6d72f88fb64f3d7b06315818ad" + name = "github.com/prometheus/client_golang" + packages = [ + "prometheus", + "prometheus/internal", + ] + pruneopts = "UT" + revision = "4ab88e80c249ed361d3299e2930427d9ac43ef8d" + version = "v1.0.0" + +[[projects]] + branch = "master" + digest = "1:2d5cd61daa5565187e1d96bae64dbbc6080dacf741448e9629c64fd93203b0d4" + name = "github.com/prometheus/client_model" + packages = ["go"] + pruneopts = "UT" + revision = "fd36f4220a901265f90734c3183c5f0c91daa0b8" + +[[projects]] + digest = "1:8dcedf2e8f06c7f94e48267dea0bc0be261fa97b377f3ae3e87843a92a549481" + name = "github.com/prometheus/common" + packages = [ + "expfmt", + "internal/bitbucket.org/ww/goautoneg", + "model", + ] + pruneopts = "UT" + revision = "31bed53e4047fd6c510e43a941f90cb31be0972a" + version = "v0.6.0" + +[[projects]] + digest = "1:366f5aa02ff6c1e2eccce9ca03a22a6d983da89eecff8a89965401764534eb7c" + name = "github.com/prometheus/procfs" + packages = [ + ".", + "internal/fs", + ] + pruneopts = "UT" + revision = "3f98efb27840a48a7a2898ec80be07674d19f9c8" + version = "v0.0.3" + +[[projects]] + digest = "1:bb495ec276ab82d3dd08504bbc0594a65de8c3b22c6f2aaa92d05b73fbf3a82e" + name = "github.com/spf13/afero" + packages = [ + ".", + "mem", + ] + pruneopts = "UT" + revision = "588a75ec4f32903aa5e39a2619ba6a4631e28424" + version = "v1.2.2" + +[[projects]] + digest = "1:e096613fb7cf34743d49af87d197663cfccd61876e2219853005a57baedfa562" + name = "github.com/spf13/cobra" + packages = ["."] + pruneopts = "UT" + revision = "f2b07da1e2c38d5f12845a4f607e2e1018cbb1f5" + version = "v0.0.5" + +[[projects]] + digest = "1:c1b1102241e7f645bc8e0c22ae352e8f0dc6484b6cb4d132fa9f24174e0119e2" + name = "github.com/spf13/pflag" + packages = ["."] + pruneopts = "UT" + revision = "298182f68c66c05229eb03ac171abe6e309ee79a" + version = "v1.0.3" + +[[projects]] + digest = "1:5da8ce674952566deae4dbc23d07c85caafc6cfa815b0b3e03e41979cedb8750" + name = "github.com/stretchr/testify" + packages = [ + "assert", + "require", + ] + pruneopts = "UT" + revision = "ffdc059bfe9ce6a4e144ba849dbedead332c6053" + version = "v1.3.0" + +[[projects]] + branch = "master" + digest = "1:cc7c5d88eaf1f0dda299c0cda5984dbf9fd1eabc127f5b804c79bae6e54d82fe" + name = "golang.org/x/crypto" + packages = [ + "curve25519", + "ed25519", + "ed25519/internal/edwards25519", + "internal/chacha20", + "internal/subtle", + "pbkdf2", + "poly1305", + "ssh", + "ssh/terminal", + ] + pruneopts = "UT" + revision = "4def268fd1a49955bfb3dda92fe3db4f924f2285" + +[[projects]] + branch = "master" + digest = "1:5a1cdd94684ec1eef3883a999410e40a4325cc40cd130e175bd1881166901b88" + name = "golang.org/x/net" + packages = [ + "context", + "context/ctxhttp", + "html", + "html/atom", + "html/charset", + "http/httpguts", + "http2", + "http2/hpack", + "idna", + "internal/timeseries", + "trace", + "websocket", + ] + pruneopts = "UT" + revision = "da137c7871d730100384dbcf36e6f8fa493aef5b" + +[[projects]] + branch = "master" + digest = "1:8d1c112fb1679fa097e9a9255a786ee47383fa2549a3da71bcb1334a693ebcfe" + name = "golang.org/x/oauth2" + packages = [ + ".", + "internal", + ] + pruneopts = "UT" + revision = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33" + +[[projects]] + branch = "master" + digest = "1:34a0c43f2d706c6292cd418409b68ae23657c8a5e960ab97bc199972d4e86d0c" + name = "golang.org/x/sys" + packages = [ + "cpu", + "unix", + "windows", + ] + pruneopts = "UT" + revision = "fae7ac547cb717d141c433a2a173315e216b64c4" + +[[projects]] + digest = "1:0b5dc8c3581fc3ea2b80cc2e360dfb9c2d61dd0cba0d2fe247e8edd3e83f7551" + name = "golang.org/x/text" + packages = [ + "collate", + "collate/build", + "encoding", + "encoding/charmap", + "encoding/htmlindex", + "encoding/internal", + "encoding/internal/identifier", + "encoding/japanese", + "encoding/korean", + "encoding/simplifiedchinese", + "encoding/traditionalchinese", + "encoding/unicode", + "internal/colltab", + "internal/gen", + "internal/language", + "internal/language/compact", + "internal/tag", + "internal/triegen", + "internal/ucd", + "internal/utf8internal", + "language", + "runes", + "secure/bidirule", + "transform", + "unicode/bidi", + "unicode/cldr", + "unicode/norm", + "unicode/rangetable", + "width", + ] + pruneopts = "UT" + revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475" + version = "v0.3.2" + +[[projects]] + branch = "master" + digest = "1:9fdc2b55e8e0fafe4b41884091e51e77344f7dc511c5acedcfd98200003bff90" + name = "golang.org/x/time" + packages = ["rate"] + pruneopts = "UT" + revision = "9d24e82272b4f38b78bc8cff74fa936d31ccd8ef" + +[[projects]] + digest = "1:6eb6e3b6d9fffb62958cf7f7d88dbbe1dd6839436b0802e194c590667a40412a" + name = "google.golang.org/appengine" + packages = [ + "internal", + "internal/base", + "internal/datastore", + "internal/log", + "internal/remote_api", + "internal/urlfetch", + "urlfetch", + ] + pruneopts = "UT" + revision = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880" + version = "v1.6.1" + +[[projects]] + branch = "master" + digest = "1:583a0c80f5e3a9343d33aea4aead1e1afcc0043db66fdf961ddd1fe8cd3a4faf" + name = "google.golang.org/genproto" + packages = ["googleapis/rpc/status"] + pruneopts = "UT" + revision = "c506a9f9061087022822e8da603a52fc387115a8" + +[[projects]] + digest = "1:cf01ae0753310464677058b125fa31e74fd943781782ada503180ad784fc83d3" + name = "google.golang.org/grpc" + packages = [ + ".", + "balancer", + "balancer/base", + "balancer/roundrobin", + "binarylog/grpc_binarylog_v1", + "codes", + "connectivity", + "credentials", + "credentials/internal", + "encoding", + "encoding/proto", + "grpclog", + "internal", + "internal/backoff", + "internal/balancerload", + "internal/binarylog", + "internal/channelz", + "internal/envconfig", + "internal/grpcrand", + "internal/grpcsync", + "internal/syscall", + "internal/transport", + "keepalive", + "metadata", + "naming", + "peer", + "resolver", + "resolver/dns", + "resolver/passthrough", + "serviceconfig", + "stats", + "status", + "tap", + ] + pruneopts = "UT" + revision = "1d89a3c832915b2314551c1d2a506874d62e53f7" + version = "v1.22.0" + +[[projects]] + digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" + name = "gopkg.in/fsnotify.v1" + packages = ["."] + pruneopts = "UT" + revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" + source = "https://github.com/fsnotify/fsnotify.git" + version = "v1.4.7" + +[[projects]] + digest = "1:2d1fbdc6777e5408cabeb02bf336305e724b925ff4546ded0fa8715a7267922a" + name = "gopkg.in/inf.v0" + packages = ["."] + pruneopts = "UT" + revision = "d2d2541c53f18d2a059457998ce2876cc8e67cbf" + version = "v0.9.1" + +[[projects]] + digest = "1:9593bab40e981b1f90b7e07faeab0d09b75fe338880d08880f986a9d3283c53f" + name = "gopkg.in/square/go-jose.v2" + packages = [ + ".", + "cipher", + "json", + "jwt", + ] + pruneopts = "UT" + revision = "730df5f748271903322feb182be83b43ebbbe27d" + version = "v2.3.1" + +[[projects]] + branch = "v1" + digest = "1:0caa92e17bc0b65a98c63e5bc76a9e844cd5e56493f8fdbb28fad101a16254d9" + name = "gopkg.in/tomb.v1" + packages = ["."] + pruneopts = "UT" + revision = "dd632973f1e7218eb1089048e0798ec9ae7dceb8" + +[[projects]] + digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96" + name = "gopkg.in/yaml.v2" + packages = ["."] + pruneopts = "UT" + revision = "51d6538a90f86fe93ac480b35f37b2be17fef232" + version = "v2.2.2" + +[[projects]] + digest = "1:6d0aa77d566a58435e633a5cd9cea7492f5f8fb330e54f5c643478473c2fc595" + name = "k8s.io/api" + packages = [ + "admission/v1beta1", + "admissionregistration/v1beta1", + "apps/v1", + "apps/v1beta1", + "apps/v1beta2", + "auditregistration/v1alpha1", + "authentication/v1", + "authentication/v1beta1", + "authorization/v1", + "authorization/v1beta1", + "autoscaling/v1", + "autoscaling/v2beta1", + "autoscaling/v2beta2", + "batch/v1", + "batch/v1beta1", + "batch/v2alpha1", + "certificates/v1beta1", + "coordination/v1", + "coordination/v1beta1", + "core/v1", + "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", + "storage/v1", + "storage/v1alpha1", + "storage/v1beta1", + ] + pruneopts = "UT" + revision = "b59d8169aab578b59c8d331a0e8cf6c56fae5fa0" + version = "kubernetes-1.15.1" + +[[projects]] + digest = "1:b8f94dc6fc6922d3ed2244a6798f4f5d4cf6380608adacb1d5eda9878d1945f8" + name = "k8s.io/apiextensions-apiserver" + packages = ["pkg/features"] + pruneopts = "UT" + revision = "d1ef975d28cef52202a75257723ffed4293eae3d" + version = "kubernetes-1.15.1" + +[[projects]] + digest = "1:87415842c7becf7595d02d2e0bed71b1b6e7c5c746063aceced92a69be4a6dc0" + name = "k8s.io/apimachinery" + packages = [ + "pkg/api/equality", + "pkg/api/errors", + "pkg/api/meta", + "pkg/api/resource", + "pkg/api/validation", + "pkg/api/validation/path", + "pkg/apis/meta/internalversion", + "pkg/apis/meta/v1", + "pkg/apis/meta/v1/unstructured", + "pkg/apis/meta/v1/unstructured/unstructuredscheme", + "pkg/apis/meta/v1/validation", + "pkg/apis/meta/v1beta1", + "pkg/conversion", + "pkg/conversion/queryparams", + "pkg/fields", + "pkg/labels", + "pkg/runtime", + "pkg/runtime/schema", + "pkg/runtime/serializer", + "pkg/runtime/serializer/json", + "pkg/runtime/serializer/protobuf", + "pkg/runtime/serializer/recognizer", + "pkg/runtime/serializer/streaming", + "pkg/runtime/serializer/versioning", + "pkg/selection", + "pkg/types", + "pkg/util/cache", + "pkg/util/clock", + "pkg/util/diff", + "pkg/util/duration", + "pkg/util/errors", + "pkg/util/framer", + "pkg/util/httpstream", + "pkg/util/httpstream/spdy", + "pkg/util/intstr", + "pkg/util/json", + "pkg/util/mergepatch", + "pkg/util/naming", + "pkg/util/net", + "pkg/util/rand", + "pkg/util/remotecommand", + "pkg/util/runtime", + "pkg/util/sets", + "pkg/util/strategicpatch", + "pkg/util/uuid", + "pkg/util/validation", + "pkg/util/validation/field", + "pkg/util/version", + "pkg/util/wait", + "pkg/util/yaml", + "pkg/version", + "pkg/watch", + "third_party/forked/golang/json", + "third_party/forked/golang/netutil", + "third_party/forked/golang/reflect", + ] + pruneopts = "UT" + revision = "1799e75a07195de9460b8ef7300883499f12127b" + version = "kubernetes-1.15.1" + +[[projects]] + digest = "1:c71d22f7b0a3cfb24af1d90d66f279d7600e5780391c3844c232e61ea44a3f07" + name = "k8s.io/apiserver" + packages = [ + "pkg/apis/audit", + "pkg/apis/audit/v1", + "pkg/apis/audit/v1alpha1", + "pkg/apis/audit/v1beta1", + "pkg/audit", + "pkg/authentication/authenticator", + "pkg/authentication/serviceaccount", + "pkg/authentication/user", + "pkg/authorization/authorizer", + "pkg/features", + "pkg/storage", + "pkg/storage/etcd", + "pkg/storage/names", + "pkg/util/feature", + ] + pruneopts = "UT" + revision = "a1aa83af71a7acc8bc46e6e32d67c86f08052ac2" + version = "kubernetes-1.15.1" + +[[projects]] + branch = "master" + digest = "1:5fa6ad5191afe7af49f891d73ac1d19aa290c1a14f1d0cf7039cf43772ea1c78" + name = "k8s.io/cli-runtime" + packages = [ + "pkg/genericclioptions", + "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 = "59adbd30f884ae85d956a141c4eee0df8770e567" + +[[projects]] + digest = "1:c27389f812da202aa88e64bef521215f4f126d114a0d9f9cf49fbbd8ef77d79a" + name = "k8s.io/client-go" + packages = [ + "discovery", + "discovery/cached/disk", + "discovery/cached/memory", + "dynamic", + "dynamic/dynamicinformer", + "dynamic/dynamiclister", + "informers", + "informers/admissionregistration", + "informers/admissionregistration/v1beta1", + "informers/apps", + "informers/apps/v1", + "informers/apps/v1beta1", + "informers/apps/v1beta2", + "informers/auditregistration", + "informers/auditregistration/v1alpha1", + "informers/autoscaling", + "informers/autoscaling/v1", + "informers/autoscaling/v2beta1", + "informers/autoscaling/v2beta2", + "informers/batch", + "informers/batch/v1", + "informers/batch/v1beta1", + "informers/batch/v2alpha1", + "informers/certificates", + "informers/certificates/v1beta1", + "informers/coordination", + "informers/coordination/v1", + "informers/coordination/v1beta1", + "informers/core", + "informers/core/v1", + "informers/events", + "informers/events/v1beta1", + "informers/extensions", + "informers/extensions/v1beta1", + "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", + "informers/rbac/v1", + "informers/rbac/v1alpha1", + "informers/rbac/v1beta1", + "informers/scheduling", + "informers/scheduling/v1", + "informers/scheduling/v1alpha1", + "informers/scheduling/v1beta1", + "informers/settings", + "informers/settings/v1alpha1", + "informers/storage", + "informers/storage/v1", + "informers/storage/v1alpha1", + "informers/storage/v1beta1", + "kubernetes", + "kubernetes/scheme", + "kubernetes/typed/admissionregistration/v1beta1", + "kubernetes/typed/apps/v1", + "kubernetes/typed/apps/v1beta1", + "kubernetes/typed/apps/v1beta2", + "kubernetes/typed/auditregistration/v1alpha1", + "kubernetes/typed/authentication/v1", + "kubernetes/typed/authentication/v1beta1", + "kubernetes/typed/authorization/v1", + "kubernetes/typed/authorization/v1beta1", + "kubernetes/typed/autoscaling/v1", + "kubernetes/typed/autoscaling/v2beta1", + "kubernetes/typed/autoscaling/v2beta2", + "kubernetes/typed/batch/v1", + "kubernetes/typed/batch/v1beta1", + "kubernetes/typed/batch/v2alpha1", + "kubernetes/typed/certificates/v1beta1", + "kubernetes/typed/coordination/v1", + "kubernetes/typed/coordination/v1beta1", + "kubernetes/typed/core/v1", + "kubernetes/typed/events/v1beta1", + "kubernetes/typed/extensions/v1beta1", + "kubernetes/typed/networking/v1", + "kubernetes/typed/networking/v1beta1", + "kubernetes/typed/node/v1alpha1", + "kubernetes/typed/node/v1beta1", + "kubernetes/typed/policy/v1beta1", + "kubernetes/typed/rbac/v1", + "kubernetes/typed/rbac/v1alpha1", + "kubernetes/typed/rbac/v1beta1", + "kubernetes/typed/scheduling/v1", + "kubernetes/typed/scheduling/v1alpha1", + "kubernetes/typed/scheduling/v1beta1", + "kubernetes/typed/settings/v1alpha1", + "kubernetes/typed/storage/v1", + "kubernetes/typed/storage/v1alpha1", + "kubernetes/typed/storage/v1beta1", + "listers/admissionregistration/v1beta1", + "listers/apps/v1", + "listers/apps/v1beta1", + "listers/apps/v1beta2", + "listers/auditregistration/v1alpha1", + "listers/autoscaling/v1", + "listers/autoscaling/v2beta1", + "listers/autoscaling/v2beta2", + "listers/batch/v1", + "listers/batch/v1beta1", + "listers/batch/v2alpha1", + "listers/certificates/v1beta1", + "listers/coordination/v1", + "listers/coordination/v1beta1", + "listers/core/v1", + "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", + "listers/storage/v1", + "listers/storage/v1alpha1", + "listers/storage/v1beta1", + "pkg/apis/clientauthentication", + "pkg/apis/clientauthentication/v1alpha1", + "pkg/apis/clientauthentication/v1beta1", + "pkg/version", + "plugin/pkg/client/auth/exec", + "rest", + "rest/watch", + "restmapper", + "scale", + "scale/scheme", + "scale/scheme/appsint", + "scale/scheme/appsv1beta1", + "scale/scheme/appsv1beta2", + "scale/scheme/autoscalingv1", + "scale/scheme/extensionsint", + "scale/scheme/extensionsv1beta1", + "third_party/forked/golang/template", + "tools/auth", + "tools/cache", + "tools/clientcmd", + "tools/clientcmd/api", + "tools/clientcmd/api/latest", + "tools/clientcmd/api/v1", + "tools/metrics", + "tools/pager", + "tools/record", + "tools/record/util", + "tools/reference", + "tools/remotecommand", + "tools/watch", + "transport", + "transport/spdy", + "util/cert", + "util/connrotation", + "util/exec", + "util/flowcontrol", + "util/homedir", + "util/jsonpath", + "util/keyutil", + "util/retry", + "util/workqueue", + ] + pruneopts = "UT" + revision = "8e956561bbf57253b1d19c449d0f24e8cb18d467" + version = "kubernetes-1.15.1" + +[[projects]] + branch = "master" + digest = "1:31c93e8261dc33dfcf3dd362033268a6fe11770e7b227f432ad8bc5dcd2cb52a" + name = "k8s.io/cloud-provider" + packages = [ + ".", + "service/helpers", + "volume", + "volume/helpers", + ] + pruneopts = "UT" + revision = "585d8110a88f18f8cb30cf64236f373f84708c63" + +[[projects]] + branch = "master" + digest = "1:7ea7b6554e132327fb6d20c7b8baa38d82d5c42af590200d64d887db73d1df6c" + name = "k8s.io/component-base" + packages = [ + "cli/flag", + "featuregate", + ] + pruneopts = "UT" + revision = "b4f50308a6168b3e1e8687b3fb46e9bf1a112ee5" + +[[projects]] + branch = "master" + digest = "1:02f13bd2d73efce8e487ff71224d14bf878182ced9f50fca481df76c5b4ccb37" + name = "k8s.io/cri-api" + packages = ["pkg/apis/runtime/v1alpha2"] + pruneopts = "UT" + revision = "0b0c4484b3d3cc29ce8890ba0de35d571db071a2" + +[[projects]] + branch = "master" + digest = "1:18507c9ec89a233e7c4ebd883c2fd75a366f02617a169a69b78823728bb22d23" + name = "k8s.io/csi-translation-lib" + packages = [ + ".", + "plugins", + ] + pruneopts = "UT" + revision = "2a445d2079def1aad9183f2393ee1a14ffb66135" + +[[projects]] + digest = "1:c283ca5951eb7d723d3300762f96ff94c2ea11eaceb788279e2b7327f92e4f2a" + name = "k8s.io/klog" + packages = ["."] + pruneopts = "UT" + revision = "d98d8acdac006fb39831f1b25640813fef9c314f" + version = "v0.3.3" + +[[projects]] + branch = "master" + digest = "1:ecc4b13156741bff53b3c116991760ac9ce9ff034c0a8f9e9683b8b5fddfca16" + name = "k8s.io/kube-openapi" + packages = [ + "pkg/common", + "pkg/util/proto", + ] + pruneopts = "UT" + revision = "3cf2ea39288623b60ec6ed8423a75b8e996fe289" + +[[projects]] + digest = "1:f0a91c8aa523d37aab92658168e0518e5f2bd03029e7ae0fd5944eb4b6d7c149" + name = "k8s.io/kubernetes" + packages = [ + "pkg/api/legacyscheme", + "pkg/api/service", + "pkg/api/v1/pod", + "pkg/apis/apps", + "pkg/apis/apps/validation", + "pkg/apis/autoscaling", + "pkg/apis/batch", + "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/v1/helper/qos", + "pkg/apis/core/validation", + "pkg/apis/extensions", + "pkg/apis/networking", + "pkg/apis/policy", + "pkg/apis/policy/validation", + "pkg/apis/scheduling", + "pkg/apis/storage/v1/util", + "pkg/capabilities", + "pkg/client/conditions", + "pkg/controller", + "pkg/controller/deployment/util", + "pkg/controller/nodelifecycle", + "pkg/controller/nodelifecycle/scheduler", + "pkg/controller/service", + "pkg/controller/util/node", + "pkg/controller/volume/persistentvolume/util", + "pkg/controller/volume/scheduling", + "pkg/features", + "pkg/fieldpath", + "pkg/kubectl", + "pkg/kubectl/apps", + "pkg/kubectl/describe", + "pkg/kubectl/describe/versioned", + "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/podutils", + "pkg/kubectl/util/qos", + "pkg/kubectl/util/rbac", + "pkg/kubectl/util/resource", + "pkg/kubectl/util/slice", + "pkg/kubectl/util/storage", + "pkg/kubelet/apis", + "pkg/kubelet/apis/config", + "pkg/kubelet/apis/stats/v1alpha1", + "pkg/kubelet/checkpoint", + "pkg/kubelet/checkpointmanager", + "pkg/kubelet/checkpointmanager/checksum", + "pkg/kubelet/checkpointmanager/errors", + "pkg/kubelet/configmap", + "pkg/kubelet/container", + "pkg/kubelet/dockershim/metrics", + "pkg/kubelet/events", + "pkg/kubelet/lifecycle", + "pkg/kubelet/metrics", + "pkg/kubelet/pod", + "pkg/kubelet/secret", + "pkg/kubelet/sysctl", + "pkg/kubelet/types", + "pkg/kubelet/util", + "pkg/kubelet/util/format", + "pkg/kubelet/util/manager", + "pkg/kubelet/util/store", + "pkg/master/ports", + "pkg/registry/core/service/allocator", + "pkg/registry/core/service/portallocator", + "pkg/scheduler/algorithm", + "pkg/scheduler/algorithm/predicates", + "pkg/scheduler/algorithm/priorities/util", + "pkg/scheduler/api", + "pkg/scheduler/metrics", + "pkg/scheduler/nodeinfo", + "pkg/scheduler/util", + "pkg/scheduler/volumebinder", + "pkg/security/apparmor", + "pkg/security/podsecuritypolicy/seccomp", + "pkg/security/podsecuritypolicy/util", + "pkg/serviceaccount", + "pkg/ssh", + "pkg/util/filesystem", + "pkg/util/hash", + "pkg/util/labels", + "pkg/util/metrics", + "pkg/util/mount", + "pkg/util/node", + "pkg/util/parsers", + "pkg/util/resizefs", + "pkg/util/slice", + "pkg/util/system", + "pkg/util/taints", + "pkg/volume", + "pkg/volume/util", + "pkg/volume/util/fs", + "pkg/volume/util/quota", + "pkg/volume/util/quota/common", + "pkg/volume/util/recyclerclient", + "pkg/volume/util/subpath", + "pkg/volume/util/types", + "pkg/volume/util/volumepathhandler", + "test/e2e/framework", + "test/e2e/framework/auth", + "test/e2e/framework/ginkgowrapper", + "test/e2e/framework/log", + "test/e2e/framework/metrics", + "test/e2e/framework/podlogs", + "test/e2e/framework/ssh", + "test/e2e/framework/testfiles", + "test/e2e/framework/volume", + "test/e2e/manifest", + "test/e2e/perftype", + "test/e2e/storage/testpatterns", + "test/e2e/storage/testsuites", + "test/e2e/storage/utils", + "test/utils", + "test/utils/image", + "third_party/forked/golang/expansion", + ] + pruneopts = "UT" + revision = "4485c6f18cee9a5d3c3b4e523bd27972b1b53892" + version = "v1.15.1" + +[[projects]] + branch = "master" + digest = "1:45eab9c679400487d1823e7a4019b618d71ff9274bd67b6dfae0e9b39c0c3516" + name = "k8s.io/utils" + packages = [ + "buffer", + "exec", + "integer", + "io", + "keymutex", + "net", + "nsenter", + "path", + "pointer", + "strings", + "trace", + ] + pruneopts = "UT" + revision = "3dccf664f023863740c508fb4284e49742bedfa4" + +[[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" + name = "sigs.k8s.io/yaml" + packages = ["."] + pruneopts = "UT" + revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" + version = "v1.1.0" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "github.com/onsi/ginkgo", + "github.com/onsi/gomega", + "k8s.io/api/core/v1", + "k8s.io/apimachinery/pkg/util/sets", + "k8s.io/kubernetes/test/e2e/framework", + "k8s.io/kubernetes/test/e2e/framework/testfiles", + "k8s.io/kubernetes/test/e2e/storage/testpatterns", + "k8s.io/kubernetes/test/e2e/storage/testsuites", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/test/e2e/Gopkg.toml b/test/e2e/Gopkg.toml new file mode 100644 index 000000000..4f6e9b6fe --- /dev/null +++ b/test/e2e/Gopkg.toml @@ -0,0 +1,40 @@ +[[constraint]] + name = "k8s.io/kubernetes" + version = "v1.15.1" + +[[constraint]] + name = "github.com/onsi/ginkgo" + version = "1.8.0" + +[[constraint]] + name = "github.com/onsi/gomega" + version = "1.5.0" + +[[override]] + name = "k8s.io/client-go" + version = "kubernetes-1.15.1" + +[[override]] + name = "k8s.io/api" + version = "kubernetes-1.15.1" + +[[override]] + name = "k8s.io/apiextensions-apiserver" + version = "kubernetes-1.15.1" + +[[override]] + name = "k8s.io/apimachinery" + version = "kubernetes-1.15.1" + +[[override]] + name = "k8s.io/apiserver" + version = "kubernetes-1.15.1" + +[[override]] + name = "gopkg.in/fsnotify.v1" + version = "1.4.7" + source = "https://github.com/fsnotify/fsnotify.git" + +[prune] + go-tests = true + unused-packages = true diff --git a/test/e2e/README.md b/test/e2e/README.md new file mode 100644 index 000000000..0eeb94c32 --- /dev/null +++ b/test/e2e/README.md @@ -0,0 +1,13 @@ +# Prerequisites +- Amazon EFS file system +- kubernetes 1.14+ cluster whose workers (preferably 2 or more) can mount the Amazon EFS file system + +# Run +```sh +dep ensure +GO111MODULE=off go test -v -timeout 0 ./... -kubeconfig=$HOME/.kube/config -ginkgo.skip=Disruptive \ + -file-system-id=fs-c2a43e69 +``` +# FAQ +- empty `go.mod` because: https://github.com/golang/go/wiki/Modules#can-an-additional-gomod-exclude-unnecessary-content-do-modules-have-the-equivalent-of-a-gitignore-file +- kubernetes uses go modules, but importing the e2e framework is hard, so use vendoring via dep diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go new file mode 100644 index 000000000..66f4018da --- /dev/null +++ b/test/e2e/e2e_test.go @@ -0,0 +1,140 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package e2e + +import ( + "flag" + "log" + "testing" + + "github.com/onsi/ginkgo" + "github.com/onsi/gomega" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e/framework/testfiles" + "k8s.io/kubernetes/test/e2e/storage/testpatterns" + "k8s.io/kubernetes/test/e2e/storage/testsuites" +) + +func init() { + framework.HandleFlags() + framework.AfterReadingAllFlags(&framework.TestContext) + // PWD is test/e2e inside the git repo + testfiles.AddFileSource(testfiles.RootFileSource{Root: "../.."}) +} + +var fileSystemID = flag.String("file-system-id", "", "required. file system ID of the EFS file system to use for the test") + +func TestEFSCSI(t *testing.T) { + if *fileSystemID == "" { + log.Fatalf("file-system-id required. file system ID of the EFS file system to use for the test.") + } + gomega.RegisterFailHandler(ginkgo.Fail) + ginkgo.RunSpecs(t, "EFS CSI Suite") +} + +type efsDriver struct { + driverInfo testsuites.DriverInfo +} + +var _ testsuites.TestDriver = &efsDriver{} + +// TODO implement Inline (unless it's redundant) and DynamicPV +// var _ testsuites.InlineVolumeTestDriver = &efsDriver{} +var _ testsuites.PreprovisionedPVTestDriver = &efsDriver{} + +func InitEFSCSIDriver() testsuites.TestDriver { + return &efsDriver{ + driverInfo: testsuites.DriverInfo{ + Name: "efs.csi.aws.com", + SupportedFsType: sets.NewString(""), + SupportedMountOption: sets.NewString("tls"), + Capabilities: map[testsuites.Capability]bool{ + testsuites.CapPersistence: true, + testsuites.CapExec: true, + testsuites.CapMultiPODs: true, + testsuites.CapRWX: true, + }, + }, + } +} + +func (e *efsDriver) GetDriverInfo() *testsuites.DriverInfo { + return &e.driverInfo +} + +func (e *efsDriver) SkipUnsupportedTest(testpatterns.TestPattern) {} + +func (e *efsDriver) PrepareTest(f *framework.Framework) (*testsuites.PerTestConfig, func()) { + ginkgo.By("Deploying EFS CSI driver") + cancelPodLogs := testsuites.StartPodLogs(f) + + /* TODO deploy the driver before the test. + cleanup, err := f.CreateFromManifests(nil, "deploy/kubernetes/manifest.yaml") + if err != nil { + framework.Failf("Error deploying EFS CSI driver: %v", err) + } + */ + + return &testsuites.PerTestConfig{ + Driver: e, + Prefix: "efs", + Framework: f, + }, func() { + ginkgo.By("Cleaning up EFS CSI driver") + /* TODO deploy the driver before the test. + cleanup() + */ + cancelPodLogs() + } +} + +func (e *efsDriver) CreateVolume(config *testsuites.PerTestConfig, volType testpatterns.TestVolType) testsuites.TestVolume { + // TODO it's assumed that the EFS volumeHandle referred to in GetPersistentVolumeSource already exists. Instead, it could be dynamically created per test here? + return nil +} + +func (e *efsDriver) GetPersistentVolumeSource(readOnly bool, fsType string, volume testsuites.TestVolume) (*v1.PersistentVolumeSource, *v1.VolumeNodeAffinity) { + pvSource := v1.PersistentVolumeSource{ + CSI: &v1.CSIPersistentVolumeSource{ + Driver: e.driverInfo.Name, + VolumeHandle: *fileSystemID, + // TODO isolate e2e test files to a path? + // VolumeAttributes: map[string]string{"path": "/e2e"}, + }, + } + return &pvSource, nil +} + +// List of testSuites to be executed in below loop +var csiTestSuites = []func() testsuites.TestSuite{ + testsuites.InitVolumesTestSuite, + testsuites.InitVolumeIOTestSuite, + testsuites.InitVolumeModeTestSuite, + testsuites.InitSubPathTestSuite, + testsuites.InitProvisioningTestSuite, + testsuites.InitSnapshottableTestSuite, + testsuites.InitMultiVolumeTestSuite, +} + +var _ = ginkgo.Describe("EFS CSI", func() { + driver := InitEFSCSIDriver() + ginkgo.Context(testsuites.GetDriverNameWithFeatureTags(InitEFSCSIDriver()), func() { + testsuites.DefineTestSuite(driver, csiTestSuites) + }) +}) diff --git a/test/e2e/go.mod b/test/e2e/go.mod new file mode 100644 index 000000000..e69de29bb