Use tag to get stable runs

- Use v1.7.0-alpha.1 tag of the kubernetes master branch
- Add support for NFS scenarios
- Tweak list of tests
- Add ENABLE_HOSTPATH_PROVISIONER
- Allow specifying full job failure names

Change-Id: I0b4840858236de9f49c7797564ec5b6a8032875e
This commit is contained in:
Davanum Srinivas 2017-04-06 20:31:05 -04:00
parent 264904ba1e
commit 19c4d1ed7d
2 changed files with 244 additions and 37 deletions

View File

@ -17,35 +17,231 @@
BASE_DIR=$(cd $(dirname $BASH_SOURCE)/.. && pwd)
TESTS_TO_SKIP=(
TESTS_LIST_REGEX=(
'\[Slow\]'
'\[Serial\]'
'\[Disruptive\]'
'\[Flaky\]'
'\[Feature:.+\]'
'\[HPA\]'
'Dashboard'
'NFS.*should.*be.*mountable'
'provide.*basic.*identity'
'should.*adopt.*matching.*orphans.*and.*release.*non.*matching.*pods'
'should.*allow.*template.*updates'
'should.*call.*prestop.*when.*killing.*a.*pod'
'should.*create.*and.*stop.*a.*working.*application'
'should.*create.*endpoints.*for.*unready.*pods'
'should.*handle.*in.*cluster.*config'
'should.*not.*deadlock.*when.*a.*pod.s.*predecessor.*fails'
'should.*provide.*DNS.*for.*ExternalName.*services'
'should.*provide.*DNS.*for.*pods.*for.*Hostname.*and.*Subdomain.*Annotation'
'should.*provide.*DNS.*for.*services'
'should.*provide.*DNS.*for.*the.*cluster'
'should.*serve.*a.*basic.*endpoint.*from.*pods'
'should.*support.*exec.*through.*an.*HTTP.*proxy'
'should.*update.*labels.*on.*modification'
)
function skipped_test_names () {
TESTS_LIST=(
'Basic StatefulSet functionality [StatefulSetBasic] should allow template updates'
'Basic StatefulSet functionality [StatefulSetBasic] should provide basic identity'
'Cadvisor [BeforeEach] should be healthy on every node.'
'ConfigMap [AfterEach] updates should be reflected in volume [Conformance] [Volume]'
'ConfigMap [It] should be consumable from pods in volume [Conformance] [Volume]'
'ConfigMap [It] should be consumable via environment variable [Conformance]'
'ConfigMap [It] should be consumable via the environment [Conformance]'
'ConfigMap should be consumable from pods in volume with mappings [Conformance] [Volume]'
'ConfigMap should be consumable from pods in volume with mappings and Item mode set[Conformance] [Volume]'
'ConfigMap should be consumable from pods in volume with mappings as non-root [Conformance] [Volume]'
'ConfigMap should be consumable in multiple volumes in the same pod [Conformance] [Volume]'
'CronJob [BeforeEach] should replace jobs when ReplaceConcurrent'
'DNS should provide DNS for ExternalName services'
'DNS should provide DNS for pods for Hostname and Subdomain Annotation'
'DNS should provide DNS for services [Conformance]'
'DNS should provide DNS for the cluster [Conformance]'
'Deployment RecreateDeployment should delete old pods and create new ones'
'Deployment [AfterEach] deployment should support rollover'
'Deployment [BeforeEach] deployment reaping should cascade to its replica sets and pods'
'Deployment [It] RollingUpdateDeployment should delete old pods and create new ones'
'Deployment [It] deployment should delete old replica sets'
'Deployment [It] deployment should label adopted RSs and pods'
'Deployment [It] deployment should support rollback when there.*s replica set with no revision'
'Deployment [It] deployment should support rollback'
'Deployment [It] deployment should support rollover'
'Deployment [It] paused deployment should be able to scale'
'Deployment [It] scaled rollout deployment should not block on annotation check'
'Deployment paused deployment should be ignored by the controller'
'DisruptionController [AfterEach] should create a PodDisruptionBudget'
'DisruptionController [It] evictions: enough pods, absolute => should allow an eviction'
'DisruptionController [It] evictions: enough pods, replicaSet, percentage => should allow an eviction'
'DisruptionController [It] evictions: no PDB => should allow an eviction'
'DisruptionController evictions: too few pods, absolute => should not allow an eviction'
'Docker Containers [It] should be able to override the image.* default arguments (docker cmd) [Conformance]'
'Docker Containers [It] should be able to override the image.* default command and arguments [Conformance]'
'Docker Containers [It] should be able to override the image.* default commmand (docker entrypoint) [Conformance]'
'Docker Containers [It] should use the image defaults if command and args are blank [Conformance]'
'Downward API [It] should provide container.*s limits.cpu/memory and requests.cpu/memory as env vars [Conformance]'
'Downward API [It] should provide default limits.cpu/memory from node allocatable [Conformance]'
'Downward API [It] should provide pod and host IP as an env var [Conformance]'
'Downward API [It] should provide pod name and namespace as env vars [Conformance]'
'Downward API volume [AfterEach] should set DefaultMode on files [Conformance] [Volume]'
'Downward API volume [It] should provide container.* cpu request [Conformance] [Volume]'
'Downward API volume [It] should provide container.* memory limit [Conformance] [Volume]'
'Downward API volume [It] should provide container.* memory request [Conformance] [Volume]'
'Downward API volume [It] should provide node allocatable .* default cpu limit if the limit is not set [Conformance] [Volume]'
'Downward API volume [It] should provide node allocatable .* default memory limit if the limit is not set [Conformance] [Volume]'
'Downward API volume [It] should provide podname only [Conformance] [Volume]'
'Downward API volume [It] should update annotations on modification [Conformance] [Volume]'
'Downward API volume should provide container.*s cpu limit [Conformance] [Volume]'
'Downward API volume should set mode on item file [Conformance] [Volume]'
'Downward API volume should update labels on modification [Conformance] [Volume]'
'EmptyDir volumes [BeforeEach] should support (root,0644,default) [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*non-root,0644,tmpfs.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*non-root,0666,tmpfs.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*non-root,0777,default.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*non-root,0777,tmpfs.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*root,0644,tmpfs.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*root,0666,tmpfs.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*root,0777,default.* [Conformance] [Volume]'
'EmptyDir volumes [It] should support .*root,0777,tmpfs.* [Conformance] [Volume]'
'EmptyDir volumes [It] volume on default medium should have the correct mode [Conformance] [Volume]'
'EmptyDir volumes [It] volume on tmpfs should have the correct mode [Conformance] [Volume]'
'EmptyDir volumes should support (non-root,0666,default) [Conformance] [Volume]'
'EmptyDir volumes should support (root,0666,default) [Conformance] [Volume]'
'Events [It] should be sent by kubelets and the scheduler about pods scheduling and running [Conformance]'
'Garbage collector [It] should orphan RS created by deployment when deleteOptions.OrphanDependents is true'
'Garbage collector [It] should orphan pods created by rc if deleteOptions.OrphanDependents is nil'
'Generated release_1_5 clientset [It] should create pods, set the deletionTimestamp and deletionGracePeriodSeconds of the pod'
'Granular Checks: Pods should function for node-pod communication: udp [Conformance]'
'Guestbook application should create and stop a working application [Conformance]'
'HostPath [AfterEach] should support subPath [Volume]'
'HostPath [It] should give a volume the correct mode [Conformance] [Volume]'
'HostPath [It] should support r/w [Volume]'
'InitContainer [It] should invoke init containers on a RestartNever pod'
'InitContainer [It] should not start app containers and fail the pod if init containers fail on a RestartNever pod'
'InitContainer should not start app containers if init containers fail on a RestartAlways pod'
'Job [It] should run a job to completion when tasks succeed'
'Kubectl client [AfterEach] [k8s.io] Kubectl create quota should create a quota with scopes'
'Kubectl client [AfterEach] [k8s.io] Kubectl describe should check if kubectl describe prints relevant information for rc and pods [Conformance]'
'Kubectl client [AfterEach] [k8s.io] Kubectl rolling-update should support rolling-update to same image [Conformance]'
'Kubectl client [AfterEach] [k8s.io] Kubectl run rc should create an rc from an image [Conformance]'
'Kubectl client [BeforeEach] [k8s.io] Kubectl run deployment should create a deployment from an image [Conformance]'
'Kubectl client [BeforeEach] [k8s.io] Kubectl run pod should create a pod from an image when restart is Never [Conformance]'
'Kubectl client [k8s.io] Kubectl expose [It] should create services for rc [Conformance]'
'Kubectl client [k8s.io] Kubectl label [BeforeEach] should update the label on a resource [Conformance]'
'Kubectl client [k8s.io] Kubectl logs [It] should be able to retrieve and filter logs [Conformance]'
'Kubectl client [k8s.io] Kubectl replace [It] should update a single-container pod.*s image [Conformance]'
'Kubectl client [k8s.io] Kubectl run --rm job [It] should create a job from an image, then delete the job [Conformance]'
'Kubectl client [k8s.io] Simple pod [It] should return command exit codes'
'Kubectl client [k8s.io] Simple pod [It] should support exec'
'Kubectl client [k8s.io] Simple pod [It] should support inline execution and attach'
'Kubectl client [k8s.io] Simple pod [It] should support port-forward'
'Kubectl client [k8s.io] Simple pod should handle in-cluster config'
'Kubectl client [k8s.io] Simple pod should support exec through an HTTP proxy'
'Kubectl client [k8s.io] Update Demo [It] should create and stop a replication controller [Conformance]'
'Kubectl client [k8s.io] Update Demo [It] should do a rolling update of a replication controller [Conformance]'
'KubeletManagedEtcHosts [It] should test kubelet managed /etc/hosts file [Conformance]'
'Kubernetes Dashboard should check that the kubernetes-dashboard instance is alive'
'LimitRange [AfterEach] should create a LimitRange with defaults and ensure pod has those defaults applied.'
'Loadbalancing: L7 [BeforeEach] [k8s.io] Nginx should conform to Ingress spec'
'MetricsGrabber [AfterEach] should grab all metrics from a Scheduler.'
'MetricsGrabber [BeforeEach] should grab all metrics from a ControllerManager.'
'MetricsGrabber [It] should grab all metrics from a Kubelet.'
'Monitoring [BeforeEach] should verify monitoring pods and all cluster nodes are available on influxdb using heapster.'
'NFS should be mountable'
'NFSv3 should be mountable for NFSv3 [Volume]'
'NFSv4 should be mountable for NFSv4 [Volume]'
'Networking [AfterEach] should provide Internet connection for containers [Conformance]'
'Networking [AfterEach] should provide unchanging, static URL paths for kubernetes api services'
'Networking [It] should check kube-proxy urls'
'Networking [k8s.io] Granular Checks: Pods [It] should function for intra-pod communication: http [Conformance]'
'Networking [k8s.io] Granular Checks: Pods [It] should function for intra-pod communication: udp [Conformance]'
'Networking [k8s.io] Granular Checks: Pods [It] should function for node-pod communication: http [Conformance]'
'Pods Extended [AfterEach] [k8s.io] Pods Set QOS Class should be submitted and removed [Conformance]'
'Pods [AfterEach] should support retrieving logs from the container over websockets'
'Pods [It] should be submitted and removed [Conformance]'
'Pods [It] should contain environment variables for services [Conformance]'
'Pods should support remote command execution over websockets'
'Port forwarding [k8s.io] With a server listening on 0.0.0.0 [It] should support forwarding over websockets'
'Port forwarding [k8s.io] With a server listening on 0.0.0.0 [k8s.io] that expects a client request [It] should support a client that connects, sends data, and disconnects'
'Port forwarding [k8s.io] With a server listening on 0.0.0.0 [k8s.io] that expects no client request should support a client that connects, sends data, and disconnects'
'Port forwarding [k8s.io] With a server listening on localhost [It] should support forwarding over websockets'
'Port forwarding [k8s.io] With a server listening on localhost [k8s.io] that expects a client request [It] should support a client that connects, sends data, and disconnects [Conformance]'
'Port forwarding [k8s.io] With a server listening on localhost [k8s.io] that expects no client request should support a client that connects, sends data, and disconnects [Conformance]'
'PreStop should call prestop when killing a pod [Conformance]'
'PrivilegedPod should enable privileged commands'
'Probing container [It] should *not* be restarted with a exec .* liveness probe [Conformance]'
'Probing container [It] should be restarted with a exec .* liveness probe [Conformance]'
'Probing container [It] with readiness probe should not be ready before initial delay and never restart [Conformance]'
'Probing container [It] with readiness probe that fails should never be ready and never restart [Conformance]'
'Probing container should be restarted with a /healthz http liveness probe [Conformance]'
'Projected [AfterEach] should be consumable in multiple volumes in the same pod [Conformance] [Volume]'
'Projected [It] should be able to mount in a volume regardless of a different secret existing with same name in different namespace [Volume]'
'Projected [It] should be consumable from pods in volume [Conformance] [Volume]'
'Projected [It] should be consumable from pods in volume as non-root [Conformance] [Volume]'
'Projected [It] should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Conformance] [Volume]'
'Projected [It] should be consumable from pods in volume with defaultMode set [Conformance] [Volume]'
'Projected [It] should be consumable in multiple volumes in a pod [Conformance] [Volume]'
'Projected [It] should project all components that make up the projection API [Conformance] [Volume] [Projection]'
'Projected [It] should provide container.*s cpu request [Conformance] [Volume]'
'Projected [It] should provide container.*s memory limit [Conformance] [Volume]'
'Projected [It] should provide container.*s memory request [Conformance] [Volume]'
'Projected [It] should provide node allocatable .* default cpu limit if the limit is not set [Conformance] [Volume]'
'Projected [It] should provide node allocatable .* default memory limit if the limit is not set [Conformance] [Volume]'
'Projected [It] should provide podname only [Conformance] [Volume]'
'Projected [It] should update annotations on modification [Conformance] [Volume]'
'Projected [It] updates should be reflected in volume [Conformance] [Volume]'
'Projected should be consumable from pods in volume with mappings [Conformance] [Volume]'
'Projected should be consumable from pods in volume with mappings and Item Mode set [Conformance] [Volume]'
'Projected should be consumable from pods in volume with mappings and Item mode set[Conformance] [Volume]'
'Projected should be consumable from pods in volume with mappings as non-root [Conformance] [Volume]'
'Projected should provide container.*s cpu limit [Conformance] [Volume]'
'Projected should set DefaultMode on files [Conformance] [Volume]'
'Projected should set mode on item file [Conformance] [Volume]'
'Projected should update labels on modification [Conformance] [Volume]'
'Proxy version v1 [AfterEach] should proxy logs on node with explicit kubelet port [Conformance]'
'Proxy version v1 [BeforeEach] should proxy to cadvisor using proxy subresource'
'Proxy version v1 [It] should proxy logs on node [Conformance]'
'Proxy version v1 [It] should proxy logs on node using proxy subresource [Conformance]'
'Proxy version v1 [It] should proxy through a service and a pod [Conformance]'
'ReplicaSet [BeforeEach] should surface a failure condition on a common issue like exceeded quota'
'ReplicaSet [It] should release no longer matching pods'
'ReplicaSet should serve a basic image on each replica with a public image [Conformance]'
'ReplicationController [AfterEach] should adopt matching pods on creation'
'ReplicationController [It] should serve a basic image on each replica with a public image [Conformance]'
'ReplicationController [It] should surface a failure condition on a common issue like exceeded quota'
'ResourceQuota [AfterEach] should create a ResourceQuota and ensure its status is promptly calculated.'
'ResourceQuota [BeforeEach] should verify ResourceQuota with best effort scope.'
'ResourceQuota [It] should create a ResourceQuota and capture the life of a configMap.'
'ResourceQuota [It] should create a ResourceQuota and capture the life of a pod.'
'ResourceQuota [It] should create a ResourceQuota and capture the life of a replication controller.'
'ResourceQuota should create a ResourceQuota and capture the life of a secret.'
'Secrets [BeforeEach] should be able to mount in a volume regardless of a different secret existing with same name in different namespace [Volume]'
'Secrets [It] should be consumable from pods in env vars [Conformance]'
'Secrets [It] should be consumable from pods in volume [Conformance] [Volume]'
'Secrets [It] should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Conformance] [Volume]'
'Secrets [It] should be consumable from pods in volume with defaultMode set [Conformance] [Volume]'
'Secrets [It] should be consumable in multiple volumes in a pod [Conformance] [Volume]'
'Secrets [It] should be consumable via the environment [Conformance]'
'Secrets optional updates should be reflected in volume [Conformance] [Volume]'
'Secrets should be consumable from pods in volume with mappings [Conformance] [Volume]'
'Secrets should be consumable from pods in volume with mappings and Item Mode set [Conformance] [Volume]'
'Service endpoints latency [It] should not be very high [Conformance]'
'ServiceAccounts [It] should mount an API token into pods [Conformance]'
'Services [AfterEach] should prevent NodePort collisions'
'Services [It] should be able to create a functioning NodePort service'
'Services [It] should preserve source pod IP for traffic thru service cluster IP'
'Services [It] should release NodePorts on delete'
'Services [It] should serve multiport endpoints from pods'
'Services should create endpoints for unready pods'
'Services should serve a basic endpoint from pods [Conformance]'
'StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] [It] Scaling down before scale up is finished should wait until current pod will be running and ready before it will be removed'
'StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] [It] Scaling should happen in predictable order and halt if any stateful pod is unhealthy'
'StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should adopt matching orphans and release non-matching pods'
'StatefulSet [k8s.io] Basic StatefulSet functionality [StatefulSetBasic] should not deadlock when a pod.*s predecessor fails'
'Sysctls [It] should not launch unsafe, but not explicitly enabled sysctls on the node'
'Sysctls [It] should support sysctls'
'Sysctls [It] should support unsafe sysctls which are actually whitelisted'
'Variable Expansion [It] should allow composing env vars into new env vars [Conformance]'
'Variable Expansion [It] should allow substituting values in a container.*s args [Conformance]'
'Variable Expansion [It] should allow substituting values in a container.*s command [Conformance]'
'Volume Placement [Volume] [BeforeEach] should create and delete pod with multiple volumes from different datastore'
'Volume Placement [Volume] [BeforeEach] should create and delete pod with the same volume source attach/detach to different worker nodes'
'Volumes [Volume] [k8s.io] ConfigMap [It] should be mountable'
'kubelet [k8s.io] Clean up pods on node [It] kubelet should be able to delete 10 pods per node in 1m0s'
)
function escape_test_name() {
sed 's/\[[^]]*\]//g' <<< "$1" | sed "s/[^[:alnum:]]/ /g" | tr -s " " | sed "s/^\s\+//" | sed "s/\s/.*/g"
}
function test_names () {
local first=y
for name in "${TESTS_TO_SKIP[@]}"; do
for name in "${TESTS_LIST_REGEX[@]}"; do
if [ -z "${first}" ]; then
echo -n "|"
else
@ -53,6 +249,14 @@ function skipped_test_names () {
fi
echo -n "${name}"
done
for name in "${TESTS_LIST[@]}"; do
if [ -z "${first}" ]; then
echo -n "|"
else
first=
fi
echo -n "$(escape_test_name "${name}")"
done
}
cd $BASE/new/devstack
@ -109,7 +313,7 @@ echo "Dump Kubernetes Objects..."
echo "Running tests..."
set -ex
#set -ex
export GOPATH=${BASE_DIR}/go
export KUBE_MASTER=local
@ -128,5 +332,5 @@ sudo -E PATH=$GOPATH/bin:$PATH make all WHAT=vendor/github.com/onsi/ginkgo/ginkg
source $DEST/.gimme/envs/go1.7.5.env
sudo -E PATH=$GOPATH/bin:$PATH make all WHAT=test/e2e/e2e.test
sudo -E PATH=$GOPATH/bin:$PATH go run hack/e2e.go -- -v --test --test_args="--ginkgo.trace=true --ginkgo.skip=$(skipped_test_names)"
sudo -E PATH=$GOPATH/bin:$PATH go run hack/e2e.go -- -v --test --test_args="--ginkgo.trace=true --ginkgo.seed=1378936983 --ginkgo.v --ginkgo.skip=$(test_names)"
popd >/dev/null

View File

@ -5,16 +5,6 @@
# Functions to control the installation and configuration of kubernetes with the
# external OpenStack cloud provider enabled.
# Dependencies:
#
# - ``functions`` file
# ``stack.sh`` calls the entry points in this order:
#
# - install_k8s_cloud_provider
# - configure_k8s_cloud_provider
# - cleanup_dlm
# Save trace setting
_XTRACE_K8S_PROVIDER=$(set +o | grep xtrace)
set -o xtrace
@ -35,6 +25,8 @@ function install_prereqs {
# Install pre-reqs
$BASE_DIR/tools/install-distro-packages.sh
$BASE_DIR/tools/test-setup.sh
#install_package nfs-common
}
@ -70,13 +62,19 @@ function install_k8s_cloud_provider {
go env
go version
go get -u github.com/jteeuwen/go-bindata/go-bindata || true
go get -u github.com/cloudflare/cfssl/cmd/... || true
# Get Kubernetes from source
mkdir -p ${GOPATH}/src/k8s.io/
if [ ! -d "${K8S_SRC}" ]; then
git clone https://${CONFORMANCE_REPO} ${K8S_SRC}
pushd ${K8S_SRC} >/dev/null
git remote update
git fetch --all --tags --prune
git checkout tags/v1.7.0-alpha.1
popd >/dev/null
fi
go get -u github.com/jteeuwen/go-bindata/go-bindata || true
go get -u github.com/cloudflare/cfssl/cmd/... || true
# Run the script that builds kubernetes from source and starts the processes
pushd ${K8S_SRC} >/dev/null
@ -93,9 +91,14 @@ function install_k8s_cloud_provider {
sudo touch $LOG_DIR/kubelet.log;sudo ln -s $LOG_DIR/kubelet.log $LOG_DIR/screen-kubelet.log
# Turn on a few things in local-up-cluster.sh
export ALLOW_PRIVILEGED=true
export ALLOW_SECURITY_CONTEXT=true
export ALLOW_ANY_TOKEN=true
#export ALLOW_PRIVILEGED=true
#export ALLOW_SECURITY_CONTEXT=true
#export ALLOW_ANY_TOKEN=true
#export ENABLE_HOSTPATH_PROVISIONER=true
#export SERVICE_CLUSTER_IP_RANGE=10.1.0.0/24
#export FIRST_SERVICE_CLUSTER_IP=10.1.0.1
#export API_HOST_IP=${HOST_IP:-"127.0.0.1"}
#export KUBELET_HOST=${HOST_IP:-"127.0.0.1"}
run_process kubernetes "sudo -E PATH=$PATH hack/local-up-cluster.sh"
popd >/dev/null