package v3

import (
	"fmt"
	"strings"

	projectv3 "github.com/rancher/types/apis/project.cattle.io/v3"
	"github.com/rancher/types/image"
)

const (
	DefaultK8s = "v1.14.3-rancher1-1"
)

var (
	m = image.Mirror

	K8sBadVersions = map[string]bool{
		"v1.9.7-rancher1":    true,
		"v1.10.1-rancher1":   true,
		"v1.8.11-rancher1":   true,
		"v1.8.10-rancher1-1": true,
	}

	// K8sVersionsCurrent are the latest versions available for installation
	K8sVersionsCurrent = []string{
		// When add a new k8s version to 2.2, make sure to add support for it to the 2.1.x branch.
		// Account for the fact that rke-tools image is different cross branches, and it requires using
		// different k8s version tag
		"v1.12.9-rancher1-1",
		"v1.13.7-rancher1-1",
		"v1.14.3-rancher1-1",
	}

	// K8sVersionToRKESystemImages is dynamically populated on init() with the latest versions
	K8sVersionToRKESystemImages map[string]RKESystemImages

	// K8sVersionServiceOptions - service options per k8s version
	K8sVersionServiceOptions = map[string]KubernetesServicesOptions{
		"v1.14": {
			KubeAPI: map[string]string{
				"tls-cipher-suites":        "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"enable-admission-plugins": "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota",
			},
			Kubelet: map[string]string{
				"tls-cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
			},
		},
		"v1.13": {
			KubeAPI: map[string]string{
				"tls-cipher-suites":        "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"enable-admission-plugins": "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota",
				"repair-malformed-updates": "false",
			},
			Kubelet: map[string]string{
				"tls-cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
			},
		},
		"v1.12": {
			KubeAPI: map[string]string{
				"tls-cipher-suites":        "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"enable-admission-plugins": "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota",
				"repair-malformed-updates": "false",
			},
			Kubelet: map[string]string{
				"tls-cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
			},
		},
		"v1.11": {
			KubeAPI: map[string]string{
				"tls-cipher-suites":        "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"enable-admission-plugins": "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota",
				"repair-malformed-updates": "false",
			},
			Kubelet: map[string]string{
				"tls-cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"cadvisor-port":     "0",
			},
		},
		"v1.10": {
			KubeAPI: map[string]string{
				"tls-cipher-suites":        "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"endpoint-reconciler-type": "lease",
				"enable-admission-plugins": "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota",
				"repair-malformed-updates": "false",
			},
			Kubelet: map[string]string{
				"tls-cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
				"cadvisor-port":     "0",
			},
		},
		"v1.9": {
			KubeAPI: map[string]string{
				"endpoint-reconciler-type": "lease",
				"admission-control":        "ServiceAccount,NamespaceLifecycle,LimitRanger,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota,DefaultTolerationSeconds",
				"repair-malformed-updates": "false",
			},
			Kubelet: map[string]string{
				"cadvisor-port": "0",
			},
		},
	}

	// ToolsSystemImages default images for alert, pipeline, logging, globaldns
	ToolsSystemImages = struct {
		AlertSystemImages    AlertSystemImages
		PipelineSystemImages projectv3.PipelineSystemImages
		LoggingSystemImages  LoggingSystemImages
		AuthSystemImages     AuthSystemImages
	}{
		AlertSystemImages: AlertSystemImages{
			AlertManager:       m("prom/alertmanager:v0.15.2"),
			AlertManagerHelper: m("rancher/alertmanager-helper:v0.0.2"),
		},
		PipelineSystemImages: projectv3.PipelineSystemImages{
			Jenkins:       m("rancher/pipeline-jenkins-server:v0.1.0"),
			JenkinsJnlp:   m("jenkins/jnlp-slave:3.10-1-alpine"),
			AlpineGit:     m("rancher/pipeline-tools:v0.1.9"),
			PluginsDocker: m("plugins/docker:17.12"),
			Minio:         m("minio/minio:RELEASE.2018-05-25T19-49-13Z"),
			Registry:      m("registry:2"),
			RegistryProxy: m("rancher/pipeline-tools:v0.1.9"),
			KubeApply:     m("rancher/pipeline-tools:v0.1.9"),
		},
		LoggingSystemImages: LoggingSystemImages{
			Fluentd:                       m("rancher/fluentd:v0.1.11"),
			FluentdHelper:                 m("rancher/fluentd-helper:v0.1.2"),
			LogAggregatorFlexVolumeDriver: m("rancher/log-aggregator:v0.1.4"),
		},
		AuthSystemImages: AuthSystemImages{
			KubeAPIAuth: m("rancher/kube-api-auth:v0.1.3"),
		},
	}

	AllK8sVersions = map[string]RKESystemImages{
		"v1.8.10-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.0.17"),
			Kubernetes:                m("rancher/hyperkube:v1.8.10-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.4"),
			NginxProxy:                m("rancher/rke-tools:v0.1.4"),
			CertDownloader:            m("rancher/rke-tools:v0.1.4"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.4"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.8.11-rancher1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.0.17"),
			Kubernetes:                m("rancher/hyperkube:v1.8.11-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.4"),
			NginxProxy:                m("rancher/rke-tools:v0.1.4"),
			CertDownloader:            m("rancher/rke-tools:v0.1.4"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.4"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.8.11-rancher2-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.0.17"),
			Kubernetes:                m("rancher/hyperkube:v1.8.11-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.8"),
			NginxProxy:                m("rancher/rke-tools:v0.1.8"),
			CertDownloader:            m("rancher/rke-tools:v0.1.8"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.8"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.5"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.5"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.9.5-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.9.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.4"),
			NginxProxy:                m("rancher/rke-tools:v0.1.4"),
			CertDownloader:            m("rancher/rke-tools:v0.1.4"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.4"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.9.7-rancher1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.9.7-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.4"),
			NginxProxy:                m("rancher/rke-tools:v0.1.4"),
			CertDownloader:            m("rancher/rke-tools:v0.1.4"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.4"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.9.7-rancher2-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.9.7-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.8"),
			NginxProxy:                m("rancher/rke-tools:v0.1.8"),
			CertDownloader:            m("rancher/rke-tools:v0.1.8"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.8"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.9.7-rancher2-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.9.7-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.13"),
			NginxProxy:                m("rancher/rke-tools:v0.1.13"),
			CertDownloader:            m("rancher/rke-tools:v0.1.13"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.13"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.0"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.10.0-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.0-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.4"),
			NginxProxy:                m("rancher/rke-tools:v0.1.4"),
			CertDownloader:            m("rancher/rke-tools:v0.1.4"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.4"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.10.1-rancher1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.1-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.4"),
			NginxProxy:                m("rancher/rke-tools:v0.1.4"),
			CertDownloader:            m("rancher/rke-tools:v0.1.4"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.4"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.10.1-rancher2-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.1-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.8"),
			NginxProxy:                m("rancher/rke-tools:v0.1.8"),
			CertDownloader:            m("rancher/rke-tools:v0.1.8"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.8"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.10.3-rancher2-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.3-rancher2"),
			Alpine:                    m("rancher/rke-tools:v0.1.10"),
			NginxProxy:                m("rancher/rke-tools:v0.1.10"),
			CertDownloader:            m("rancher/rke-tools:v0.1.10"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.10"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.10.5-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.10"),
			NginxProxy:                m("rancher/rke-tools:v0.1.10"),
			CertDownloader:            m("rancher/rke-tools:v0.1.10"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.10"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.10.2-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
		},
		"v1.10.5-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.13"),
			NginxProxy:                m("rancher/rke-tools:v0.1.13"),
			CertDownloader:            m("rancher/rke-tools:v0.1.13"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.13"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.10.11-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.11-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.13"),
			NginxProxy:                m("rancher/rke-tools:v0.1.13"),
			CertDownloader:            m("rancher/rke-tools:v0.1.13"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.13"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.10.12-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.1.12"),
			Kubernetes:                m("rancher/hyperkube:v1.10.12-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.13"),
			NginxProxy:                m("rancher/rke-tools:v0.1.13"),
			CertDownloader:            m("rancher/rke-tools:v0.1.13"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.13"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.1-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.1-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.13"),
			NginxProxy:                m("rancher/rke-tools:v0.1.13"),
			CertDownloader:            m("rancher/rke-tools:v0.1.13"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.13"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.2-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.2-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.13"),
			NginxProxy:                m("rancher/rke-tools:v0.1.13"),
			CertDownloader:            m("rancher/rke-tools:v0.1.13"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.13"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.9.1"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.2.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.1"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.1"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.1"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.1"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.9.1"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.2-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.2-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.3-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.3-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.5-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.8-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.8-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.15"),
			NginxProxy:                m("rancher/rke-tools:v0.1.15"),
			CertDownloader:            m("rancher/rke-tools:v0.1.15"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.15"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.6-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.6-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.15"),
			NginxProxy:                m("rancher/rke-tools:v0.1.15"),
			CertDownloader:            m("rancher/rke-tools:v0.1.15"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.15"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.11.9-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.9-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.15"),
			NginxProxy:                m("rancher/rke-tools:v0.1.15"),
			CertDownloader:            m("rancher/rke-tools:v0.1.15"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.15"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		// Enabled in Rancher v2.2.3
		"v1.11.9-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.18"),
			Kubernetes:                m("rancher/hyperkube:v1.11.9-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.28"),
			NginxProxy:                m("rancher/rke-tools:v0.1.28"),
			CertDownloader:            m("rancher/rke-tools:v0.1.28"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.28"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.10"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.10"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.10"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.2.1"),
		},
		"v1.12.0-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.0-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
		},
		"v1.12.1-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.1-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
		},
		"v1.12.3-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.3-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.18"),
			NginxProxy:                m("rancher/rke-tools:v0.1.18"),
			CertDownloader:            m("rancher/rke-tools:v0.1.18"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.18"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
		},
		"v1.12.4-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.4-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.1.2"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.1.2"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.16.2-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
		},
		"v1.12.5-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
		},
		"v1.12.6-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.12.6-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		"v1.12.7-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.12.7-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.2",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		// Enabled in Rancher v2.2.3
		"v1.12.7-rancher1-3": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.12.7-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.28"),
			NginxProxy:                m("rancher/rke-tools:v0.1.28"),
			CertDownloader:            m("rancher/rke-tools:v0.1.28"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.28"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   m("coredns/coredns:1.2.2"),
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		// Enabled in Rancher v2.2.5
		"v1.12.9-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.12.9-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.31"),
			NginxProxy:                m("rancher/rke-tools:v0.1.31"),
			CertDownloader:            m("rancher/rke-tools:v0.1.31"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.31"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   m("coredns/coredns:1.2.2"),
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		"v1.13.1-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.13.1-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.6",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
		},
		"v1.13.4-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.13.4-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.6",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		"v1.13.5-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.13.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.27"),
			NginxProxy:                m("rancher/rke-tools:v0.1.27"),
			CertDownloader:            m("rancher/rke-tools:v0.1.27"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.27"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.2.6",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		// Enabled in Rancher v2.2.3
		"v1.13.5-rancher1-3": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.13.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.28"),
			NginxProxy:                m("rancher/rke-tools:v0.1.28"),
			CertDownloader:            m("rancher/rke-tools:v0.1.28"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.28"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   m("coredns/coredns:1.2.6"),
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		// Enabled in Rancher v2.2.5
		"v1.13.7-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.13.7-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.31"),
			NginxProxy:                m("rancher/rke-tools:v0.1.31"),
			CertDownloader:            m("rancher/rke-tools:v0.1.31"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.31"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   m("coredns/coredns:1.2.6"),
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.0.0"),
		},
		// Enabled in Rancher v2.2.2
		"v1.14.1-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.3.10-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.14.1-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.28"),
			NginxProxy:                m("rancher/rke-tools:v0.1.28"),
			CertDownloader:            m("rancher/rke-tools:v0.1.28"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.28"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.3.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.5-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   "coredns/coredns:1.3.1",
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.3.0"),
		}, // Enabled in Rancher v2.2.3
		"v1.14.1-rancher1-2": {
			Etcd:                      m("quay.io/coreos/etcd:v3.3.10-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.14.1-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.28"),
			NginxProxy:                m("rancher/rke-tools:v0.1.28"),
			CertDownloader:            m("rancher/rke-tools:v0.1.28"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.28"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.3.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.5-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   m("coredns/coredns:1.3.1"),
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.3.0"),
		},
		// Enabled in Rancher v2.2.5
		"v1.14.3-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.3.10-rancher1"),
			Kubernetes:                m("rancher/hyperkube:v1.14.3-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.31"),
			NginxProxy:                m("rancher/rke-tools:v0.1.31"),
			CertDownloader:            m("rancher/rke-tools:v0.1.31"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.31"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.3.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0-rancher1"),
			FlannelCNI:                m("rancher/flannel-cni:v0.3.0-rancher1"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher3"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.5-rancher1"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server:v0.3.1"),
			CoreDNS:                   m("coredns/coredns:1.3.1"),
			CoreDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler:1.3.0"),
		},
		// k8s version from 2.1.x release with old rke-tools to allow upgrade from 2.1.x clusters
		// without all clusters being restarted
		"v1.12.5-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
		},
		// k8s version from 2.1.x release with old rke-tools to allow upgrade from 2.1.x clusters
		// without all clusters being restarted
		"v1.12.6-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.6-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
		},
		// k8s version from 2.1.x release with old rke-tools to allow upgrade from 2.1.x clusters
		// without all clusters being restarted
		"v1.12.7-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.12.7-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.13"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.13"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.13"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.1.3"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.1.3"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.1.3"),
			CanalCNI:                  m("quay.io/calico/cni:v3.1.3"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
		},
		// k8s version from 2.1.x release with old rke-tools to allow upgrade from 2.1.x clusters
		// without all clusters being restarted
		"v1.13.1-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.13.1-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
		},
		// k8s version from 2.1.x release with old rke-tools to allow upgrade from 2.1.x clusters
		// without all clusters being restarted
		"v1.13.4-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.13.4-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
		},
		// k8s version from 2.1.x release with old rke-tools to allow upgrade from 2.1.x clusters
		// without all clusters being restarted
		"v1.13.5-rancher1-1": {
			Etcd:                      m("quay.io/coreos/etcd:v3.2.24"),
			Kubernetes:                m("rancher/hyperkube:v1.13.5-rancher1"),
			Alpine:                    m("rancher/rke-tools:v0.1.16"),
			NginxProxy:                m("rancher/rke-tools:v0.1.16"),
			CertDownloader:            m("rancher/rke-tools:v0.1.16"),
			KubernetesServicesSidecar: m("rancher/rke-tools:v0.1.16"),
			KubeDNS:                   m("gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.15.0"),
			DNSmasq:                   m("gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.15.0"),
			KubeDNSSidecar:            m("gcr.io/google_containers/k8s-dns-sidecar-amd64:1.15.0"),
			KubeDNSAutoscaler:         m("gcr.io/google_containers/cluster-proportional-autoscaler-amd64:1.0.0"),
			Flannel:                   m("quay.io/coreos/flannel:v0.10.0"),
			FlannelCNI:                m("quay.io/coreos/flannel-cni:v0.3.0"),
			CalicoNode:                m("quay.io/calico/node:v3.4.0"),
			CalicoCNI:                 m("quay.io/calico/cni:v3.4.0"),
			CalicoCtl:                 m("quay.io/calico/ctl:v2.0.0"),
			CanalNode:                 m("quay.io/calico/node:v3.4.0"),
			CanalCNI:                  m("quay.io/calico/cni:v3.4.0"),
			CanalFlannel:              m("quay.io/coreos/flannel:v0.10.0"),
			WeaveNode:                 m("weaveworks/weave-kube:2.5.0"),
			WeaveCNI:                  m("weaveworks/weave-npc:2.5.0"),
			PodInfraContainer:         m("gcr.io/google_containers/pause-amd64:3.1"),
			Ingress:                   m("rancher/nginx-ingress-controller:0.21.0-rancher1"),
			IngressBackend:            m("k8s.gcr.io/defaultbackend:1.4"),
			MetricsServer:             m("gcr.io/google_containers/metrics-server-amd64:v0.3.1"),
		},
	}
)

func init() {
	if K8sVersionToRKESystemImages != nil {
		panic("Do not initialize or add values to K8sVersionToRKESystemImages")
	}

	K8sVersionToRKESystemImages = map[string]RKESystemImages{}

	for version, images := range AllK8sVersions {
		if K8sBadVersions[version] {
			continue
		}

		longName := "rancher/hyperkube:" + version
		if !strings.HasPrefix(longName, images.Kubernetes) {
			panic(fmt.Sprintf("For K8s version %s, the Kubernetes image tag should be a substring of %s, currently it is %s", version, version, images.Kubernetes))
		}
	}

	for _, latest := range K8sVersionsCurrent {
		images, ok := AllK8sVersions[latest]
		if !ok {
			panic("K8s version " + " is not found in AllK8sVersions map")
		}
		K8sVersionToRKESystemImages[latest] = images
	}

	if _, ok := K8sVersionToRKESystemImages[DefaultK8s]; !ok {
		panic("Default K8s version " + DefaultK8s + " is not found in k8sVersionsCurrent list")
	}

	// init Windows versions
	initWindows()
}
