123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- /*
- Copyright 2017 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 image
- import (
- "fmt"
- "io/ioutil"
- "os"
- yaml "gopkg.in/yaml.v2"
- )
- // RegistryList holds public and private image registries
- type RegistryList struct {
- DockerLibraryRegistry string `yaml:"dockerLibraryRegistry"`
- E2eRegistry string `yaml:"e2eRegistry"`
- GcRegistry string `yaml:"gcRegistry"`
- PrivateRegistry string `yaml:"privateRegistry"`
- SampleRegistry string `yaml:"sampleRegistry"`
- }
- // Config holds an images registry, name, and version
- type Config struct {
- registry string
- name string
- version string
- }
- // SetRegistry sets an image registry in a Config struct
- func (i *Config) SetRegistry(registry string) {
- i.registry = registry
- }
- // SetName sets an image name in a Config struct
- func (i *Config) SetName(name string) {
- i.name = name
- }
- // SetVersion sets an image version in a Config struct
- func (i *Config) SetVersion(version string) {
- i.version = version
- }
- func initReg() RegistryList {
- registry := RegistryList{
- DockerLibraryRegistry: "docker.io/library",
- E2eRegistry: "gcr.io/kubernetes-e2e-test-images",
- GcRegistry: "k8s.gcr.io",
- PrivateRegistry: "gcr.io/k8s-authenticated-test",
- SampleRegistry: "gcr.io/google-samples",
- }
- repoList := os.Getenv("KUBE_TEST_REPO_LIST")
- if repoList == "" {
- return registry
- }
- fileContent, err := ioutil.ReadFile(repoList)
- if err != nil {
- panic(fmt.Errorf("Error reading '%v' file contents: %v", repoList, err))
- }
- err = yaml.Unmarshal(fileContent, ®istry)
- if err != nil {
- panic(fmt.Errorf("Error unmarshalling '%v' YAML file: %v", repoList, err))
- }
- return registry
- }
- var (
- registry = initReg()
- dockerLibraryRegistry = registry.DockerLibraryRegistry
- e2eRegistry = registry.E2eRegistry
- gcRegistry = registry.GcRegistry
- // PrivateRegistry is an image repository that requires authentication
- PrivateRegistry = registry.PrivateRegistry
- sampleRegistry = registry.SampleRegistry
- // Preconfigured image configs
- imageConfigs = initImageConfigs()
- )
- const (
- // CRDConversionWebhook image
- CRDConversionWebhook = iota
- // AdmissionWebhook image
- AdmissionWebhook
- // Agnhost image
- Agnhost
- // APIServer image
- APIServer
- // AppArmorLoader image
- AppArmorLoader
- // AuditProxy image
- AuditProxy
- // BusyBox image
- BusyBox
- // CheckMetadataConcealment image
- CheckMetadataConcealment
- // CudaVectorAdd image
- CudaVectorAdd
- // CudaVectorAdd2 image
- CudaVectorAdd2
- // Dnsutils image
- Dnsutils
- // EchoServer image
- EchoServer
- // EntrypointTester image
- EntrypointTester
- // Etcd image
- Etcd
- // Fakegitserver image
- Fakegitserver
- // GBFrontend image
- GBFrontend
- // GBRedisSlave image
- GBRedisSlave
- // Hostexec image
- Hostexec
- // InClusterClient image
- InClusterClient
- // IpcUtils image
- 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
- // NonRoot runs with a default user of 1234
- NonRoot
- // NoSnatTest image
- NoSnatTest
- // NoSnatTestProxy image
- NoSnatTestProxy
- // Pause - when these values are updated, also update cmd/kubelet/app/options/container_runtime.go
- // Pause image
- Pause
- // Perl image
- Perl
- // Porter image
- Porter
- // PortForwardTester image
- PortForwardTester
- // Redis image
- Redis
- // ResourceConsumer image
- ResourceConsumer
- // ResourceController image
- 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.15v1"}
- configs[Agnhost] = Config{e2eRegistry, "agnhost", "1.0"}
- configs[APIServer] = Config{e2eRegistry, "sample-apiserver", "1.10"}
- configs[AppArmorLoader] = Config{e2eRegistry, "apparmor-loader", "1.0"}
- configs[AuditProxy] = Config{e2eRegistry, "audit-proxy", "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{gcRegistry, "etcd", "3.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[InClusterClient] = Config{e2eRegistry, "inclusterclient", "1.0"}
- 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.1"}
- 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[NonRoot] = Config{e2eRegistry, "nonroot", "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[Perl] = Config{dockerLibraryRegistry, "perl", "5.26"}
- 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", "2.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)
- func GetE2EImage(image int) string {
- 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
- func GetPauseImageName() string {
- return GetE2EImage(Pause)
- }
|