Refactor to allow for a way to get list of e2e images

Signed-off-by: Steve Sloka <slokas@vmware.com>
pull/564/head
Steve Sloka 2019-02-25 22:37:06 -05:00 committed by Steve Sloka
parent 7955a2865c
commit 6dc5494ec9
7 changed files with 184 additions and 56 deletions

View File

@ -35,6 +35,7 @@ go_test(
"//test/e2e/storage:go_default_library", "//test/e2e/storage:go_default_library",
"//test/e2e/ui:go_default_library", "//test/e2e/ui:go_default_library",
"//test/e2e/windows:go_default_library", "//test/e2e/windows:go_default_library",
"//test/utils/image:go_default_library",
], ],
) )

View File

@ -20,7 +20,7 @@ import (
"fmt" "fmt"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -51,9 +51,9 @@ var _ = SIGDescribe("ReplicationController", func() {
It("should serve a basic image on each replica with a private image", func() { It("should serve a basic image on each replica with a private image", func() {
// requires private images // requires private images
framework.SkipUnlessProviderIs("gce", "gke") framework.SkipUnlessProviderIs("gce", "gke")
privateimage := imageutils.ServeHostname privateimage := imageutils.GetConfig(imageutils.ServeHostname)
privateimage.SetRegistry(imageutils.PrivateRegistry) privateimage.SetRegistry(imageutils.PrivateRegistry)
TestReplicationControllerServeImageOrFail(f, "private", imageutils.GetE2EImage(privateimage)) TestReplicationControllerServeImageOrFail(f, "private", privateimage.GetE2EImage())
}) })
It("should surface a failure condition on a common issue like exceeded quota", func() { It("should surface a failure condition on a common issue like exceeded quota", func() {

View File

@ -21,7 +21,7 @@ import (
"time" "time"
apps "k8s.io/api/apps/v1" apps "k8s.io/api/apps/v1"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -94,9 +94,9 @@ var _ = SIGDescribe("ReplicaSet", func() {
It("should serve a basic image on each replica with a private image", func() { It("should serve a basic image on each replica with a private image", func() {
// requires private images // requires private images
framework.SkipUnlessProviderIs("gce", "gke") framework.SkipUnlessProviderIs("gce", "gke")
privateimage := imageutils.ServeHostname privateimage := imageutils.GetConfig(imageutils.ServeHostname)
privateimage.SetRegistry(imageutils.PrivateRegistry) privateimage.SetRegistry(imageutils.PrivateRegistry)
testReplicaSetServeImageOrFail(f, "private", imageutils.GetE2EImage(privateimage)) testReplicaSetServeImageOrFail(f, "private", privateimage.GetE2EImage())
}) })
It("should surface a failure condition on a common issue like exceeded quota", func() { It("should surface a failure condition on a common issue like exceeded quota", func() {

View File

@ -26,6 +26,7 @@ import (
"k8s.io/kubernetes/test/e2e/framework/testfiles" "k8s.io/kubernetes/test/e2e/framework/testfiles"
"k8s.io/kubernetes/test/e2e/framework/viperconfig" "k8s.io/kubernetes/test/e2e/framework/viperconfig"
"k8s.io/kubernetes/test/e2e/generated" "k8s.io/kubernetes/test/e2e/generated"
"k8s.io/kubernetes/test/utils/image"
// test sources // test sources
_ "k8s.io/kubernetes/test/e2e/apimachinery" _ "k8s.io/kubernetes/test/e2e/apimachinery"
@ -57,6 +58,14 @@ func init() {
fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, err)
os.Exit(1) os.Exit(1)
} }
if framework.TestContext.ListImages {
for _, v := range image.GetImageConfigs() {
fmt.Println(v.GetE2EImage())
}
os.Exit(0)
}
framework.AfterReadingAllFlags(&framework.TestContext) framework.AfterReadingAllFlags(&framework.TestContext)
// TODO: Deprecating repo-root over time... instead just use gobindata_util.go , see #23987. // TODO: Deprecating repo-root over time... instead just use gobindata_util.go , see #23987.
@ -73,6 +82,7 @@ func init() {
Asset: generated.Asset, Asset: generated.Asset,
AssetNames: generated.AssetNames, AssetNames: generated.AssetNames,
}) })
} }
func TestE2E(t *testing.T) { func TestE2E(t *testing.T) {

View File

@ -75,6 +75,8 @@ type TestContextType struct {
// TODO: Deprecating this over time... instead just use gobindata_util.go , see #23987. // TODO: Deprecating this over time... instead just use gobindata_util.go , see #23987.
RepoRoot string RepoRoot string
DockershimCheckpointDir string DockershimCheckpointDir string
// ListImages will list off all images that are used then quit
ListImages bool
// Provider identifies the infrastructure provider (gce, gke, aws) // Provider identifies the infrastructure provider (gce, gke, aws)
Provider string Provider string
@ -259,6 +261,8 @@ func RegisterCommonFlags() {
flag.StringVar(&TestContext.ImageServiceEndpoint, "image-service-endpoint", "", "The image service endpoint of cluster VM instances.") flag.StringVar(&TestContext.ImageServiceEndpoint, "image-service-endpoint", "", "The image service endpoint of cluster VM instances.")
flag.StringVar(&TestContext.DockershimCheckpointDir, "dockershim-checkpoint-dir", "/var/lib/dockershim/sandbox", "The directory for dockershim to store sandbox checkpoints.") flag.StringVar(&TestContext.DockershimCheckpointDir, "dockershim-checkpoint-dir", "/var/lib/dockershim/sandbox", "The directory for dockershim to store sandbox checkpoints.")
flag.StringVar(&TestContext.KubernetesAnywherePath, "kubernetes-anywhere-path", "/workspace/k8s.io/kubernetes-anywhere", "Which directory kubernetes-anywhere is installed to.") flag.StringVar(&TestContext.KubernetesAnywherePath, "kubernetes-anywhere-path", "/workspace/k8s.io/kubernetes-anywhere", "Which directory kubernetes-anywhere is installed to.")
flag.BoolVar(&TestContext.ListImages, "list-images", false, "If true, will show list of images used for runnning tests.")
} }
// Register flags specific to the cluster e2e test suite. // Register flags specific to the cluster e2e test suite.

View File

@ -26,7 +26,7 @@ import (
"strings" "strings"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"

View File

@ -91,61 +91,174 @@ var (
// PrivateRegistry is an image repository that requires authentication // PrivateRegistry is an image repository that requires authentication
PrivateRegistry = registry.PrivateRegistry PrivateRegistry = registry.PrivateRegistry
sampleRegistry = registry.SampleRegistry sampleRegistry = registry.SampleRegistry
// Preconfigured image configs
imageConfigs = initImageConfigs()
) )
// Preconfigured image configs const (
var ( // CRDConversionWebhook image
CRDConversionWebhook = Config{e2eRegistry, "crd-conversion-webhook", "1.13rev2"} CRDConversionWebhook = iota
AdmissionWebhook = Config{e2eRegistry, "webhook", "1.14v1"} // AdmissionWebhook image
APIServer = Config{e2eRegistry, "sample-apiserver", "1.10"} AdmissionWebhook
AppArmorLoader = Config{e2eRegistry, "apparmor-loader", "1.0"} // APIServer image
BusyBox = Config{dockerLibraryRegistry, "busybox", "1.29"} APIServer
CheckMetadataConcealment = Config{e2eRegistry, "metadata-concealment", "1.2"} // AppArmorLoader image
CudaVectorAdd = Config{e2eRegistry, "cuda-vector-add", "1.0"} AppArmorLoader
CudaVectorAdd2 = Config{e2eRegistry, "cuda-vector-add", "2.0"} // BusyBox image
Dnsutils = Config{e2eRegistry, "dnsutils", "1.1"} BusyBox
EchoServer = Config{e2eRegistry, "echoserver", "2.2"} // CheckMetadataConcealment image
EntrypointTester = Config{e2eRegistry, "entrypoint-tester", "1.0"} CheckMetadataConcealment
Etcd = Config{etcdRegistry, "etcd", "v3.3.10"} // CudaVectorAdd image
Fakegitserver = Config{e2eRegistry, "fakegitserver", "1.0"} CudaVectorAdd
GBFrontend = Config{sampleRegistry, "gb-frontend", "v6"} // CudaVectorAdd2 image
GBRedisSlave = Config{sampleRegistry, "gb-redisslave", "v3"} CudaVectorAdd2
Hostexec = Config{e2eRegistry, "hostexec", "1.1"} // Dnsutils image
IpcUtils = Config{e2eRegistry, "ipc-utils", "1.0"} Dnsutils
Iperf = Config{e2eRegistry, "iperf", "1.0"} // EchoServer image
JessieDnsutils = Config{e2eRegistry, "jessie-dnsutils", "1.0"} EchoServer
Kitten = Config{e2eRegistry, "kitten", "1.0"} // EntrypointTester image
Liveness = Config{e2eRegistry, "liveness", "1.0"} EntrypointTester
LogsGenerator = Config{e2eRegistry, "logs-generator", "1.0"} // Etcd image
Mounttest = Config{e2eRegistry, "mounttest", "1.0"} Etcd
MounttestUser = Config{e2eRegistry, "mounttest-user", "1.0"} // Fakegitserver image
Nautilus = Config{e2eRegistry, "nautilus", "1.0"} Fakegitserver
Net = Config{e2eRegistry, "net", "1.0"} // GBFrontend image
Netexec = Config{e2eRegistry, "netexec", "1.1"} GBFrontend
Nettest = Config{e2eRegistry, "nettest", "1.0"} // GBRedisSlave image
Nginx = Config{dockerLibraryRegistry, "nginx", "1.14-alpine"} GBRedisSlave
NginxNew = Config{dockerLibraryRegistry, "nginx", "1.15-alpine"} // Hostexec image
Nonewprivs = Config{e2eRegistry, "nonewprivs", "1.0"} Hostexec
NoSnatTest = Config{e2eRegistry, "no-snat-test", "1.0"} // IpcUtils image
NoSnatTestProxy = Config{e2eRegistry, "no-snat-test-proxy", "1.0"} IpcUtils
// Iperf image
Iperf
// JessieDnsutils image
JessieDnsutils
// Kitten image
Kitten
// Liveness image
Liveness
// LogsGenerator image
LogsGenerator
// Mounttest image
Mounttest
// MounttestUser image
MounttestUser
// Nautilus image
Nautilus
// Net image
Net
// Netexec image
Netexec
// Nettest image
Nettest
// Nginx image
Nginx
// NginxNew image
NginxNew
// Nonewprivs image
Nonewprivs
// NoSnatTest image
NoSnatTest
// NoSnatTestProxy image
NoSnatTestProxy
// Pause - when these values are updated, also update cmd/kubelet/app/options/container_runtime.go // Pause - when these values are updated, also update cmd/kubelet/app/options/container_runtime.go
Pause = Config{gcRegistry, "pause", "3.1"} // Pause image
Porter = Config{e2eRegistry, "porter", "1.0"} Pause
PortForwardTester = Config{e2eRegistry, "port-forward-tester", "1.0"} // Porter image
Redis = Config{e2eRegistry, "redis", "1.0"} Porter
ResourceConsumer = Config{e2eRegistry, "resource-consumer", "1.5"} // PortForwardTester image
ResourceController = Config{e2eRegistry, "resource-consumer/controller", "1.0"} PortForwardTester
ServeHostname = Config{e2eRegistry, "serve-hostname", "1.1"} // Redis image
TestWebserver = Config{e2eRegistry, "test-webserver", "1.0"} Redis
VolumeNFSServer = Config{e2eRegistry, "volume/nfs", "1.0"} // ResourceConsumer image
VolumeISCSIServer = Config{e2eRegistry, "volume/iscsi", "1.0"} ResourceConsumer
VolumeGlusterServer = Config{e2eRegistry, "volume/gluster", "1.0"} // ResourceController image
VolumeRBDServer = Config{e2eRegistry, "volume/rbd", "1.0.1"} ResourceController
// ServeHostname image
ServeHostname
// TestWebserver image
TestWebserver
// VolumeNFSServer image
VolumeNFSServer
// VolumeISCSIServer image
VolumeISCSIServer
// VolumeGlusterServer image
VolumeGlusterServer
// VolumeRBDServer image
VolumeRBDServer
) )
func initImageConfigs() map[int]Config {
configs := map[int]Config{}
configs[CRDConversionWebhook] = Config{e2eRegistry, "crd-conversion-webhook", "1.13rev2"}
configs[AdmissionWebhook] = Config{e2eRegistry, "webhook", "1.14v1"}
configs[APIServer] = Config{e2eRegistry, "sample-apiserver", "1.10"}
configs[AppArmorLoader] = Config{e2eRegistry, "apparmor-loader", "1.0"}
configs[BusyBox] = Config{dockerLibraryRegistry, "busybox", "1.29"}
configs[CheckMetadataConcealment] = Config{e2eRegistry, "metadata-concealment", "1.2"}
configs[CudaVectorAdd] = Config{e2eRegistry, "cuda-vector-add", "1.0"}
configs[CudaVectorAdd2] = Config{e2eRegistry, "cuda-vector-add", "2.0"}
configs[Dnsutils] = Config{e2eRegistry, "dnsutils", "1.1"}
configs[EchoServer] = Config{e2eRegistry, "echoserver", "2.2"}
configs[EntrypointTester] = Config{e2eRegistry, "entrypoint-tester", "1.0"}
configs[Etcd] = Config{etcdRegistry, "etcd", "v3.3.10"}
configs[Fakegitserver] = Config{e2eRegistry, "fakegitserver", "1.0"}
configs[GBFrontend] = Config{sampleRegistry, "gb-frontend", "v6"}
configs[GBRedisSlave] = Config{sampleRegistry, "gb-redisslave", "v3"}
configs[Hostexec] = Config{e2eRegistry, "hostexec", "1.1"}
configs[IpcUtils] = Config{e2eRegistry, "ipc-utils", "1.0"}
configs[Iperf] = Config{e2eRegistry, "iperf", "1.0"}
configs[JessieDnsutils] = Config{e2eRegistry, "jessie-dnsutils", "1.0"}
configs[Kitten] = Config{e2eRegistry, "kitten", "1.0"}
configs[Liveness] = Config{e2eRegistry, "liveness", "1.0"}
configs[LogsGenerator] = Config{e2eRegistry, "logs-generator", "1.0"}
configs[Mounttest] = Config{e2eRegistry, "mounttest", "1.0"}
configs[MounttestUser] = Config{e2eRegistry, "mounttest-user", "1.0"}
configs[Nautilus] = Config{e2eRegistry, "nautilus", "1.0"}
configs[Net] = Config{e2eRegistry, "net", "1.0"}
configs[Netexec] = Config{e2eRegistry, "netexec", "1.1"}
configs[Nettest] = Config{e2eRegistry, "nettest", "1.0"}
configs[Nginx] = Config{dockerLibraryRegistry, "nginx", "1.14-alpine"}
configs[NginxNew] = Config{dockerLibraryRegistry, "nginx", "1.15-alpine"}
configs[Nonewprivs] = Config{e2eRegistry, "nonewprivs", "1.0"}
configs[NoSnatTest] = Config{e2eRegistry, "no-snat-test", "1.0"}
configs[NoSnatTestProxy] = Config{e2eRegistry, "no-snat-test-proxy", "1.0"}
// Pause - when these values are updated, also update cmd/kubelet/app/options/container_runtime.go
configs[Pause] = Config{gcRegistry, "pause", "3.1"}
configs[Porter] = Config{e2eRegistry, "porter", "1.0"}
configs[PortForwardTester] = Config{e2eRegistry, "port-forward-tester", "1.0"}
configs[Redis] = Config{e2eRegistry, "redis", "1.0"}
configs[ResourceConsumer] = Config{e2eRegistry, "resource-consumer", "1.5"}
configs[ResourceController] = Config{e2eRegistry, "resource-consumer/controller", "1.0"}
configs[ServeHostname] = Config{e2eRegistry, "serve-hostname", "1.1"}
configs[TestWebserver] = Config{e2eRegistry, "test-webserver", "1.0"}
configs[VolumeNFSServer] = Config{e2eRegistry, "volume/nfs", "1.0"}
configs[VolumeISCSIServer] = Config{e2eRegistry, "volume/iscsi", "1.0"}
configs[VolumeGlusterServer] = Config{e2eRegistry, "volume/gluster", "1.0"}
configs[VolumeRBDServer] = Config{e2eRegistry, "volume/rbd", "1.0.1"}
return configs
}
// GetImageConfigs returns the map of imageConfigs
func GetImageConfigs() map[int]Config {
return imageConfigs
}
// GetConfig returns the Config object for an image
func GetConfig(image int) Config {
return imageConfigs[image]
}
// GetE2EImage returns the fully qualified URI to an image (including version) // GetE2EImage returns the fully qualified URI to an image (including version)
func GetE2EImage(image Config) string { func GetE2EImage(image int) string {
return fmt.Sprintf("%s/%s:%s", image.registry, image.name, image.version) return fmt.Sprintf("%s/%s:%s", imageConfigs[image].registry, imageConfigs[image].name, imageConfigs[image].version)
}
// GetE2EImage returns the fully qualified URI to an image (including version)
func (i *Config) GetE2EImage() string {
return fmt.Sprintf("%s/%s:%s", i.registry, i.name, i.version)
} }
// GetPauseImageName returns the pause image name with proper version // GetPauseImageName returns the pause image name with proper version