Add docker validation node e2e test.
This commit is contained in:
@@ -214,6 +214,7 @@ input-dirs
|
|||||||
insecure-bind-address
|
insecure-bind-address
|
||||||
insecure-port
|
insecure-port
|
||||||
insecure-skip-tls-verify
|
insecure-skip-tls-verify
|
||||||
|
instance-metadata
|
||||||
instance-name-prefix
|
instance-name-prefix
|
||||||
iptables-masquerade-bit
|
iptables-masquerade-bit
|
||||||
iptables-sync-period
|
iptables-sync-period
|
||||||
|
@@ -38,4 +38,4 @@ go run test/e2e_node/runner/run_e2e.go --logtostderr --vmodule=*=2 --ssh-env="g
|
|||||||
--zone="$GCE_ZONE" --project="$GCE_PROJECT" --image-project="$GCE_IMAGE_PROJECT" \
|
--zone="$GCE_ZONE" --project="$GCE_PROJECT" --image-project="$GCE_IMAGE_PROJECT" \
|
||||||
--hosts="$GCE_HOSTS" --images="$GCE_IMAGES" --cleanup="$CLEANUP" \
|
--hosts="$GCE_HOSTS" --images="$GCE_IMAGES" --cleanup="$CLEANUP" \
|
||||||
--results-dir="$ARTIFACTS" --ginkgo-flags="$GINKGO_FLAGS" \
|
--results-dir="$ARTIFACTS" --ginkgo-flags="$GINKGO_FLAGS" \
|
||||||
--setup-node="$SETUP_NODE"
|
--setup-node="$SETUP_NODE" --instance-metadata="$GCE_INSTANCE_METADATA"
|
||||||
|
9
test/e2e_node/jenkins/gci-init.yaml
Normal file
9
test/e2e_node/jenkins/gci-init.yaml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#cloud-config
|
||||||
|
|
||||||
|
runcmd:
|
||||||
|
- ETCD_VERSION=v2.2.5
|
||||||
|
- curl -L https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz -o /tmp/etcd.tar.gz
|
||||||
|
- tar xzvf /tmp/etcd.tar.gz -C /tmp
|
||||||
|
- sudo mv /tmp/etcd-${ETCD_VERSION}-linux-amd64/etcd* /usr/local/bin/
|
||||||
|
- sudo chown root:root /usr/local/bin/etcd*
|
||||||
|
- rm -r /tmp/etcd*
|
18
test/e2e_node/jenkins/jenkins-docker-validation.properties
Normal file
18
test/e2e_node/jenkins/jenkins-docker-validation.properties
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
GCI_IMAGE_PROJECT=container-vm-image-staging
|
||||||
|
GCI_IMAGE_FAMILY=gci-preview-test
|
||||||
|
GCI_IMAGE=$(gcloud compute images describe-from-family ${GCI_IMAGE_FAMILY} --project=${GCI_IMAGE_PROJECT} --format="value(name)")
|
||||||
|
DOCKER_VERSION=$(curl -fsSL --retry 3 https://api.github.com/repos/docker/docker/releases | tac | tac | grep -m 1 "\"tag_name\"\:" | grep -Eo "[0-9\.rc-]+")
|
||||||
|
GCI_CLOUD_INIT=test/e2e_node/jenkins/gci-init.yaml
|
||||||
|
|
||||||
|
GCE_HOSTS=
|
||||||
|
GCE_IMAGES=${GCI_IMAGE}
|
||||||
|
GCE_IMAGE_PROJECT=${GCI_IMAGE_PROJECT}
|
||||||
|
GCE_ZONE=us-central1-f
|
||||||
|
GCE_PROJECT=kubernetes-jenkins
|
||||||
|
# kubernetes-jenkins
|
||||||
|
# user-data is the GCI cloud init config file.
|
||||||
|
# gci-docker-version specifies docker version in GCI image.
|
||||||
|
GCE_INSTANCE_METADATA="user-data<${GCI_CLOUD_INIT},gci-docker-version=${DOCKER_VERSION}"
|
||||||
|
CLEANUP=true
|
||||||
|
GINKGO_FLAGS=--skip=FLAKY
|
||||||
|
SETUP_NODE=false
|
@@ -23,6 +23,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -49,6 +50,7 @@ var cleanup = flag.Bool("cleanup", true, "If true remove files from remote hosts
|
|||||||
var deleteInstances = flag.Bool("delete-instances", true, "If true, delete any instances created")
|
var deleteInstances = flag.Bool("delete-instances", true, "If true, delete any instances created")
|
||||||
var buildOnly = flag.Bool("build-only", false, "If true, build e2e_node_test.tar.gz and exit.")
|
var buildOnly = flag.Bool("build-only", false, "If true, build e2e_node_test.tar.gz and exit.")
|
||||||
var setupNode = flag.Bool("setup-node", false, "When true, current user will be added to docker group on the test machine")
|
var setupNode = flag.Bool("setup-node", false, "When true, current user will be added to docker group on the test machine")
|
||||||
|
var instanceMetadata = flag.String("instance-metadata", "", "key/value metadata for instances separated by '=' or '<', 'k=v' means the key is 'k' and the value is 'v'; 'k<p' means the key is 'k' and the value is extracted from the local path 'p', e.g. k1=v1,k2<p2")
|
||||||
|
|
||||||
var computeService *compute.Service
|
var computeService *compute.Service
|
||||||
|
|
||||||
@@ -254,6 +256,19 @@ func createInstance(image string) (string, error) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
if *instanceMetadata != "" {
|
||||||
|
raw := parseInstanceMetadata(*instanceMetadata)
|
||||||
|
i.Metadata = &compute.Metadata{}
|
||||||
|
metadata := []*compute.MetadataItems{}
|
||||||
|
for k, v := range raw {
|
||||||
|
val := v
|
||||||
|
metadata = append(metadata, &compute.MetadataItems{
|
||||||
|
Key: k,
|
||||||
|
Value: &val,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
i.Metadata.Items = metadata
|
||||||
|
}
|
||||||
op, err := computeService.Instances.Insert(*project, *zone, i).Do()
|
op, err := computeService.Instances.Insert(*project, *zone, i).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -343,6 +358,30 @@ func deleteInstance(image string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseInstanceMetadata(str string) map[string]string {
|
||||||
|
metadata := make(map[string]string)
|
||||||
|
ss := strings.Split(str, ",")
|
||||||
|
for _, s := range ss {
|
||||||
|
kv := strings.Split(s, "=")
|
||||||
|
if len(kv) == 2 {
|
||||||
|
metadata[kv[0]] = kv[1]
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
kp := strings.Split(s, "<")
|
||||||
|
if len(kp) != 2 {
|
||||||
|
glog.Errorf("Invalid instance metadata: %q", s)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
v, err := ioutil.ReadFile(kp[1])
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Failed to read metadata file %q: %v", kp[1], err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
metadata[kp[0]] = string(v)
|
||||||
|
}
|
||||||
|
return metadata
|
||||||
|
}
|
||||||
|
|
||||||
func imageToInstanceName(image string) string {
|
func imageToInstanceName(image string) string {
|
||||||
return *instanceNamePrefix + "-" + image
|
return *instanceNamePrefix + "-" + image
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user