mirror of https://github.com/kubernetes/kops.git
Merge pull request #10504 from rifelpet/kubetest2-test
Run k/k's e2e suite via new kubetest2 make target
This commit is contained in:
commit
66fe512b69
20
Makefile
20
Makefile
|
|
@ -26,7 +26,7 @@ UNIQUE:=$(shell date +%s)
|
||||||
BUILD=$(KOPS_ROOT)/.build
|
BUILD=$(KOPS_ROOT)/.build
|
||||||
LOCAL=$(BUILD)/local
|
LOCAL=$(BUILD)/local
|
||||||
BINDATA_TARGETS=upup/models/bindata.go
|
BINDATA_TARGETS=upup/models/bindata.go
|
||||||
ARTIFACTS=$(BUILD)/artifacts
|
ARTIFACTS?=$(BUILD)/artifacts
|
||||||
DIST=$(BUILD)/dist
|
DIST=$(BUILD)/dist
|
||||||
IMAGES=$(DIST)/images
|
IMAGES=$(DIST)/images
|
||||||
CHANNELS=$(LOCAL)/channels
|
CHANNELS=$(LOCAL)/channels
|
||||||
|
|
@ -185,6 +185,24 @@ test: ${BINDATA_TARGETS} # Run tests locally
|
||||||
test-windows: ${BINDATA_TARGETS} # Run tests locally
|
test-windows: ${BINDATA_TARGETS} # Run tests locally
|
||||||
go test -v $(go list ./... | grep -v /nodeup/)
|
go test -v $(go list ./... | grep -v /nodeup/)
|
||||||
|
|
||||||
|
.PHONY: test-e2e
|
||||||
|
test-e2e:
|
||||||
|
cd /home/prow/go/src/k8s.io/kops/tests/e2e && \
|
||||||
|
export GO111MODULE=on && \
|
||||||
|
go get sigs.k8s.io/kubetest2@latest && \
|
||||||
|
go get sigs.k8s.io/kubetest2/kubetest2-tester-ginkgo@latest && \
|
||||||
|
go install ./kubetest2-kops
|
||||||
|
kubetest2 kops \
|
||||||
|
-v 2 \
|
||||||
|
--build --up --down \
|
||||||
|
--cloud-provider=aws \
|
||||||
|
--kops-binary-path=/home/prow/go/src/k8s.io/kops/bazel-bin/cmd/kops/linux-amd64/kops \
|
||||||
|
--test=ginkgo \
|
||||||
|
-- \
|
||||||
|
--test-package-version=v1.19.4 \
|
||||||
|
--parallel 25 \
|
||||||
|
--skip-regex="\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]|\[HPA\]|Dashboard|Services.*functioning.*NodePort"
|
||||||
|
|
||||||
.PHONY: ${DIST}/linux/amd64/nodeup
|
.PHONY: ${DIST}/linux/amd64/nodeup
|
||||||
${DIST}/linux/amd64/nodeup: ${BINDATA_TARGETS}
|
${DIST}/linux/amd64/nodeup: ${BINDATA_TARGETS}
|
||||||
mkdir -p ${DIST}
|
mkdir -p ${DIST}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,6 @@ go 1.15
|
||||||
require (
|
require (
|
||||||
github.com/octago/sflags v0.2.0
|
github.com/octago/sflags v0.2.0
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
k8s.io/klog/v2 v2.3.0
|
k8s.io/klog/v2 v2.4.0
|
||||||
sigs.k8s.io/kubetest2 v0.0.0-20200930205053-4e57931be178
|
sigs.k8s.io/kubetest2 v0.0.0-20201130212850-d9dad7c8699c
|
||||||
)
|
)
|
||||||
|
|
|
||||||
553
tests/e2e/go.sum
553
tests/e2e/go.sum
File diff suppressed because it is too large
Load Diff
|
|
@ -22,6 +22,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
@ -137,3 +138,22 @@ func stateStore(cloudProvider string) string {
|
||||||
}
|
}
|
||||||
return ss
|
return ss
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the default is $ARTIFACTS if set, otherwise ./_artifacts
|
||||||
|
// constructed as an absolute path to help the ginkgo tester because
|
||||||
|
// for some reason it needs an absolute path to the kubeconfig
|
||||||
|
func defaultArtifactsDir() (string, error) {
|
||||||
|
if path, set := os.LookupEnv("ARTIFACTS"); set {
|
||||||
|
absPath, err := filepath.Abs(path)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("failed to convert filepath from $ARTIFACTS (%s) to absolute path: %s", path, err)
|
||||||
|
}
|
||||||
|
return absPath, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
absPath, err := filepath.Abs("_artifacts")
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("when constructing default artifacts dir, failed to get absolute path: %s", err)
|
||||||
|
}
|
||||||
|
return absPath, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,8 @@ type deployer struct {
|
||||||
SSHPublicKeyPath string `flag:"ssh-public-key" desc:"The path to the public key passed to the cloud provider"`
|
SSHPublicKeyPath string `flag:"ssh-public-key" desc:"The path to the public key passed to the cloud provider"`
|
||||||
SSHUser []string `flag:"ssh-user" desc:"The SSH users to use for SSH access to instances"`
|
SSHUser []string `flag:"ssh-user" desc:"The SSH users to use for SSH access to instances"`
|
||||||
|
|
||||||
|
ArtifactsDir string `flag:"-"`
|
||||||
|
|
||||||
BuildOptions *builder.BuildOptions
|
BuildOptions *builder.BuildOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,11 +66,6 @@ func (d *deployer) Provider() string {
|
||||||
return Name
|
return Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *deployer) DumpClusterLogs() error {
|
|
||||||
klog.Warning("DumpClusterLogs is not implemented")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// New implements deployer.New for kops
|
// New implements deployer.New for kops
|
||||||
func New(opts types.Options) (types.Deployer, *pflag.FlagSet) {
|
func New(opts types.Options) (types.Deployer, *pflag.FlagSet) {
|
||||||
// create a deployer object and set fields that are not flag controlled
|
// create a deployer object and set fields that are not flag controlled
|
||||||
|
|
@ -77,6 +74,12 @@ func New(opts types.Options) (types.Deployer, *pflag.FlagSet) {
|
||||||
BuildOptions: &builder.BuildOptions{},
|
BuildOptions: &builder.BuildOptions{},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dir, err := defaultArtifactsDir()
|
||||||
|
if err != nil {
|
||||||
|
klog.Fatalf("unable to determine artifacts directory: %v", err)
|
||||||
|
}
|
||||||
|
d.ArtifactsDir = dir
|
||||||
|
|
||||||
// register flags
|
// register flags
|
||||||
fs := bindFlags(d)
|
fs := bindFlags(d)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,10 @@ func (d *deployer) Down() error {
|
||||||
if err := d.init(); err != nil {
|
if err := d.init(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := d.DumpClusterLogs(); err != nil {
|
||||||
|
klog.Warningf("Dumping cluster logs at the start of Down() failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
args := []string{
|
args := []string{
|
||||||
d.KopsBinaryPath, "delete", "cluster",
|
d.KopsBinaryPath, "delete", "cluster",
|
||||||
"--name", d.ClusterName,
|
"--name", d.ClusterName,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 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 deployer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"k8s.io/klog/v2"
|
||||||
|
"sigs.k8s.io/kubetest2/pkg/exec"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d *deployer) DumpClusterLogs() error {
|
||||||
|
|
||||||
|
args := []string{
|
||||||
|
d.KopsBinaryPath, "toolbox", "dump",
|
||||||
|
"--name", d.ClusterName,
|
||||||
|
"--dir", d.ArtifactsDir,
|
||||||
|
"--private-key", d.SSHPrivateKeyPath,
|
||||||
|
}
|
||||||
|
klog.Info(strings.Join(args, " "))
|
||||||
|
cmd := exec.Command(args[0], args[1:]...)
|
||||||
|
cmd.SetEnv(d.env()...)
|
||||||
|
if err := runWithOutput(cmd); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runWithOutput(cmd exec.Cmd) error {
|
||||||
|
exec.InheritOutput(cmd)
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue