manifest.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. /*
  2. Copyright 2017 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package image
  14. import (
  15. "fmt"
  16. "io/ioutil"
  17. "os"
  18. yaml "gopkg.in/yaml.v2"
  19. )
  20. // RegistryList holds public and private image registries
  21. type RegistryList struct {
  22. DockerLibraryRegistry string `yaml:"dockerLibraryRegistry"`
  23. E2eRegistry string `yaml:"e2eRegistry"`
  24. GcRegistry string `yaml:"gcRegistry"`
  25. PrivateRegistry string `yaml:"privateRegistry"`
  26. SampleRegistry string `yaml:"sampleRegistry"`
  27. }
  28. // Config holds an images registry, name, and version
  29. type Config struct {
  30. registry string
  31. name string
  32. version string
  33. }
  34. // SetRegistry sets an image registry in a Config struct
  35. func (i *Config) SetRegistry(registry string) {
  36. i.registry = registry
  37. }
  38. // SetName sets an image name in a Config struct
  39. func (i *Config) SetName(name string) {
  40. i.name = name
  41. }
  42. // SetVersion sets an image version in a Config struct
  43. func (i *Config) SetVersion(version string) {
  44. i.version = version
  45. }
  46. func initReg() RegistryList {
  47. registry := RegistryList{
  48. DockerLibraryRegistry: "docker.io/library",
  49. E2eRegistry: "gcr.io/kubernetes-e2e-test-images",
  50. GcRegistry: "k8s.gcr.io",
  51. PrivateRegistry: "gcr.io/k8s-authenticated-test",
  52. SampleRegistry: "gcr.io/google-samples",
  53. }
  54. repoList := os.Getenv("KUBE_TEST_REPO_LIST")
  55. if repoList == "" {
  56. return registry
  57. }
  58. fileContent, err := ioutil.ReadFile(repoList)
  59. if err != nil {
  60. panic(fmt.Errorf("Error reading '%v' file contents: %v", repoList, err))
  61. }
  62. err = yaml.Unmarshal(fileContent, &registry)
  63. if err != nil {
  64. panic(fmt.Errorf("Error unmarshalling '%v' YAML file: %v", repoList, err))
  65. }
  66. return registry
  67. }
  68. var (
  69. registry = initReg()
  70. dockerLibraryRegistry = registry.DockerLibraryRegistry
  71. e2eRegistry = registry.E2eRegistry
  72. gcRegistry = registry.GcRegistry
  73. // PrivateRegistry is an image repository that requires authentication
  74. PrivateRegistry = registry.PrivateRegistry
  75. sampleRegistry = registry.SampleRegistry
  76. // Preconfigured image configs
  77. imageConfigs = initImageConfigs()
  78. )
  79. const (
  80. // CRDConversionWebhook image
  81. CRDConversionWebhook = iota
  82. // AdmissionWebhook image
  83. AdmissionWebhook
  84. // Agnhost image
  85. Agnhost
  86. // APIServer image
  87. APIServer
  88. // AppArmorLoader image
  89. AppArmorLoader
  90. // AuditProxy image
  91. AuditProxy
  92. // BusyBox image
  93. BusyBox
  94. // CheckMetadataConcealment image
  95. CheckMetadataConcealment
  96. // CudaVectorAdd image
  97. CudaVectorAdd
  98. // CudaVectorAdd2 image
  99. CudaVectorAdd2
  100. // Dnsutils image
  101. Dnsutils
  102. // EchoServer image
  103. EchoServer
  104. // EntrypointTester image
  105. EntrypointTester
  106. // Etcd image
  107. Etcd
  108. // Fakegitserver image
  109. Fakegitserver
  110. // GBFrontend image
  111. GBFrontend
  112. // GBRedisSlave image
  113. GBRedisSlave
  114. // Hostexec image
  115. Hostexec
  116. // InClusterClient image
  117. InClusterClient
  118. // IpcUtils image
  119. IpcUtils
  120. // Iperf image
  121. Iperf
  122. // JessieDnsutils image
  123. JessieDnsutils
  124. // Kitten image
  125. Kitten
  126. // Liveness image
  127. Liveness
  128. // LogsGenerator image
  129. LogsGenerator
  130. // Mounttest image
  131. Mounttest
  132. // MounttestUser image
  133. MounttestUser
  134. // Nautilus image
  135. Nautilus
  136. // Net image
  137. Net
  138. // Netexec image
  139. Netexec
  140. // Nettest image
  141. Nettest
  142. // Nginx image
  143. Nginx
  144. // NginxNew image
  145. NginxNew
  146. // Nonewprivs image
  147. Nonewprivs
  148. // NonRoot runs with a default user of 1234
  149. NonRoot
  150. // NoSnatTest image
  151. NoSnatTest
  152. // NoSnatTestProxy image
  153. NoSnatTestProxy
  154. // Pause - when these values are updated, also update cmd/kubelet/app/options/container_runtime.go
  155. // Pause image
  156. Pause
  157. // Perl image
  158. Perl
  159. // Porter image
  160. Porter
  161. // PortForwardTester image
  162. PortForwardTester
  163. // Redis image
  164. Redis
  165. // ResourceConsumer image
  166. ResourceConsumer
  167. // ResourceController image
  168. ResourceController
  169. // ServeHostname image
  170. ServeHostname
  171. // TestWebserver image
  172. TestWebserver
  173. // VolumeNFSServer image
  174. VolumeNFSServer
  175. // VolumeISCSIServer image
  176. VolumeISCSIServer
  177. // VolumeGlusterServer image
  178. VolumeGlusterServer
  179. // VolumeRBDServer image
  180. VolumeRBDServer
  181. )
  182. func initImageConfigs() map[int]Config {
  183. configs := map[int]Config{}
  184. configs[CRDConversionWebhook] = Config{e2eRegistry, "crd-conversion-webhook", "1.13rev2"}
  185. configs[AdmissionWebhook] = Config{e2eRegistry, "webhook", "1.15v1"}
  186. configs[Agnhost] = Config{e2eRegistry, "agnhost", "1.0"}
  187. configs[APIServer] = Config{e2eRegistry, "sample-apiserver", "1.10"}
  188. configs[AppArmorLoader] = Config{e2eRegistry, "apparmor-loader", "1.0"}
  189. configs[AuditProxy] = Config{e2eRegistry, "audit-proxy", "1.0"}
  190. configs[BusyBox] = Config{dockerLibraryRegistry, "busybox", "1.29"}
  191. configs[CheckMetadataConcealment] = Config{e2eRegistry, "metadata-concealment", "1.2"}
  192. configs[CudaVectorAdd] = Config{e2eRegistry, "cuda-vector-add", "1.0"}
  193. configs[CudaVectorAdd2] = Config{e2eRegistry, "cuda-vector-add", "2.0"}
  194. configs[Dnsutils] = Config{e2eRegistry, "dnsutils", "1.1"}
  195. configs[EchoServer] = Config{e2eRegistry, "echoserver", "2.2"}
  196. configs[EntrypointTester] = Config{e2eRegistry, "entrypoint-tester", "1.0"}
  197. configs[Etcd] = Config{gcRegistry, "etcd", "3.3.10"}
  198. configs[Fakegitserver] = Config{e2eRegistry, "fakegitserver", "1.0"}
  199. configs[GBFrontend] = Config{sampleRegistry, "gb-frontend", "v6"}
  200. configs[GBRedisSlave] = Config{sampleRegistry, "gb-redisslave", "v3"}
  201. configs[Hostexec] = Config{e2eRegistry, "hostexec", "1.1"}
  202. configs[InClusterClient] = Config{e2eRegistry, "inclusterclient", "1.0"}
  203. configs[IpcUtils] = Config{e2eRegistry, "ipc-utils", "1.0"}
  204. configs[Iperf] = Config{e2eRegistry, "iperf", "1.0"}
  205. configs[JessieDnsutils] = Config{e2eRegistry, "jessie-dnsutils", "1.0"}
  206. configs[Kitten] = Config{e2eRegistry, "kitten", "1.0"}
  207. configs[Liveness] = Config{e2eRegistry, "liveness", "1.1"}
  208. configs[LogsGenerator] = Config{e2eRegistry, "logs-generator", "1.0"}
  209. configs[Mounttest] = Config{e2eRegistry, "mounttest", "1.0"}
  210. configs[MounttestUser] = Config{e2eRegistry, "mounttest-user", "1.0"}
  211. configs[Nautilus] = Config{e2eRegistry, "nautilus", "1.0"}
  212. configs[Net] = Config{e2eRegistry, "net", "1.0"}
  213. configs[Netexec] = Config{e2eRegistry, "netexec", "1.1"}
  214. configs[Nettest] = Config{e2eRegistry, "nettest", "1.0"}
  215. configs[Nginx] = Config{dockerLibraryRegistry, "nginx", "1.14-alpine"}
  216. configs[NginxNew] = Config{dockerLibraryRegistry, "nginx", "1.15-alpine"}
  217. configs[Nonewprivs] = Config{e2eRegistry, "nonewprivs", "1.0"}
  218. configs[NonRoot] = Config{e2eRegistry, "nonroot", "1.0"}
  219. configs[NoSnatTest] = Config{e2eRegistry, "no-snat-test", "1.0"}
  220. configs[NoSnatTestProxy] = Config{e2eRegistry, "no-snat-test-proxy", "1.0"}
  221. // Pause - when these values are updated, also update cmd/kubelet/app/options/container_runtime.go
  222. configs[Pause] = Config{gcRegistry, "pause", "3.1"}
  223. configs[Perl] = Config{dockerLibraryRegistry, "perl", "5.26"}
  224. configs[Porter] = Config{e2eRegistry, "porter", "1.0"}
  225. configs[PortForwardTester] = Config{e2eRegistry, "port-forward-tester", "1.0"}
  226. configs[Redis] = Config{e2eRegistry, "redis", "1.0"}
  227. configs[ResourceConsumer] = Config{e2eRegistry, "resource-consumer", "1.5"}
  228. configs[ResourceController] = Config{e2eRegistry, "resource-consumer-controller", "1.0"}
  229. configs[ServeHostname] = Config{e2eRegistry, "serve-hostname", "1.1"}
  230. configs[TestWebserver] = Config{e2eRegistry, "test-webserver", "1.0"}
  231. configs[VolumeNFSServer] = Config{e2eRegistry, "volume/nfs", "1.0"}
  232. configs[VolumeISCSIServer] = Config{e2eRegistry, "volume/iscsi", "2.0"}
  233. configs[VolumeGlusterServer] = Config{e2eRegistry, "volume/gluster", "1.0"}
  234. configs[VolumeRBDServer] = Config{e2eRegistry, "volume/rbd", "1.0.1"}
  235. return configs
  236. }
  237. // GetImageConfigs returns the map of imageConfigs
  238. func GetImageConfigs() map[int]Config {
  239. return imageConfigs
  240. }
  241. // GetConfig returns the Config object for an image
  242. func GetConfig(image int) Config {
  243. return imageConfigs[image]
  244. }
  245. // GetE2EImage returns the fully qualified URI to an image (including version)
  246. func GetE2EImage(image int) string {
  247. return fmt.Sprintf("%s/%s:%s", imageConfigs[image].registry, imageConfigs[image].name, imageConfigs[image].version)
  248. }
  249. // GetE2EImage returns the fully qualified URI to an image (including version)
  250. func (i *Config) GetE2EImage() string {
  251. return fmt.Sprintf("%s/%s:%s", i.registry, i.name, i.version)
  252. }
  253. // GetPauseImageName returns the pause image name with proper version
  254. func GetPauseImageName() string {
  255. return GetE2EImage(Pause)
  256. }