Add env vars, update tests

This commit is contained in:
Justin SB 2019-09-02 08:02:39 -07:00
parent 7fb83d9918
commit 97f552778f
No known key found for this signature in database
GPG Key ID: 8DEC5C8217494E37
15 changed files with 445 additions and 30 deletions

View File

@ -97,7 +97,7 @@ func (c *RollingUpdateCluster) RollingUpdate(groups map[string]*cloudinstances.C
defer wg.Done() defer wg.Done()
g, err := NewRollingUpdateInstanceGroup(c.Cloud, group, c.K8sClient) g, err := NewRollingUpdateInstanceGroup(c.Cloud, group)
if err == nil { if err == nil {
err = g.RollingUpdate(c, cluster, instanceGroups, true, c.BastionInterval, c.ValidationTimeout) err = g.RollingUpdate(c, cluster, instanceGroups, true, c.BastionInterval, c.ValidationTimeout)
} }
@ -125,7 +125,7 @@ func (c *RollingUpdateCluster) RollingUpdate(groups map[string]*cloudinstances.C
// and we don't want to roll all the masters at the same time. See issue #284 // and we don't want to roll all the masters at the same time. See issue #284
for _, group := range masterGroups { for _, group := range masterGroups {
g, err := NewRollingUpdateInstanceGroup(c.Cloud, group, c.K8sClient) g, err := NewRollingUpdateInstanceGroup(c.Cloud, group)
if err == nil { if err == nil {
err = g.RollingUpdate(c, cluster, instanceGroups, false, c.MasterInterval, c.ValidationTimeout) err = g.RollingUpdate(c, cluster, instanceGroups, false, c.MasterInterval, c.ValidationTimeout)
} }
@ -159,7 +159,7 @@ func (c *RollingUpdateCluster) RollingUpdate(groups map[string]*cloudinstances.C
defer wg.Done() defer wg.Done()
for k, group := range nodeGroups { for k, group := range nodeGroups {
g, err := NewRollingUpdateInstanceGroup(c.Cloud, group, c.K8sClient) g, err := NewRollingUpdateInstanceGroup(c.Cloud, group)
if err == nil { if err == nil {
err = g.RollingUpdate(c, cluster, instanceGroups, false, c.NodeInterval, c.ValidationTimeout) err = g.RollingUpdate(c, cluster, instanceGroups, false, c.NodeInterval, c.ValidationTimeout)
} }

View File

@ -149,5 +149,5 @@ func AssertMatchesFile(t *testing.T, actual string, p string) {
t.Logf("to update golden output automatically, run hack/update-expected.sh") t.Logf("to update golden output automatically, run hack/update-expected.sh")
t.Fatalf("output did not match expected for %q", p) t.Errorf("output did not match expected for %q", p)
} }

View File

@ -400,6 +400,7 @@ resource "google_compute_instance_template" "master-us-test1-a-ha-gce-example-co
metadata = { metadata = {
cluster-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_cluster-name")}" cluster-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_cluster-name")}"
kops-k8s-io-instance-group-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_kops-k8s-io-instance-group-name")}"
ssh-keys = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_ssh-keys")}" ssh-keys = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_ssh-keys")}"
startup-script = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_startup-script")}" startup-script = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_startup-script")}"
} }
@ -440,6 +441,7 @@ resource "google_compute_instance_template" "master-us-test1-b-ha-gce-example-co
metadata = { metadata = {
cluster-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_cluster-name")}" cluster-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_cluster-name")}"
kops-k8s-io-instance-group-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_kops-k8s-io-instance-group-name")}"
ssh-keys = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_ssh-keys")}" ssh-keys = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_ssh-keys")}"
startup-script = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_startup-script")}" startup-script = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_startup-script")}"
} }
@ -480,6 +482,7 @@ resource "google_compute_instance_template" "master-us-test1-c-ha-gce-example-co
metadata = { metadata = {
cluster-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_cluster-name")}" cluster-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_cluster-name")}"
kops-k8s-io-instance-group-name = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_kops-k8s-io-instance-group-name")}"
ssh-keys = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_ssh-keys")}" ssh-keys = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_ssh-keys")}"
startup-script = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_startup-script")}" startup-script = "${file("${path.module}/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_startup-script")}"
} }
@ -520,6 +523,7 @@ resource "google_compute_instance_template" "nodes-ha-gce-example-com" {
metadata = { metadata = {
cluster-name = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_cluster-name")}" cluster-name = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_cluster-name")}"
kops-k8s-io-instance-group-name = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_kops-k8s-io-instance-group-name")}"
ssh-keys = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_ssh-keys")}" ssh-keys = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_ssh-keys")}"
startup-script = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_startup-script")}" startup-script = "${file("${path.module}/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_startup-script")}"
} }

View File

@ -6,7 +6,7 @@ metadata:
labels: labels:
k8s-addon: kops-controller.addons.k8s.io k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller k8s-app: kops-controller
version: v1.14.0-alpha.1 version: v1.16.0-alpha.1
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@ -17,7 +17,7 @@ spec:
labels: labels:
k8s-addon: kops-controller.addons.k8s.io k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller k8s-app: kops-controller
version: v1.14.0-alpha.1 version: v1.16.0-alpha.1
annotations: annotations:
scheduler.alpha.kubernetes.io/critical-pod: '' scheduler.alpha.kubernetes.io/critical-pod: ''
spec: spec:
@ -36,11 +36,11 @@ spec:
{{ range $arg := KopsControllerArgv }} {{ range $arg := KopsControllerArgv }}
- "{{ $arg }}" - "{{ $arg }}"
{{ end }} {{ end }}
{{- if .EgressProxy }} {{- if KopsSystemEnv }}
env: env:
{{ range $name, $value := ProxyEnv }} {{ range $var := KopsSystemEnv }}
- name: {{ $name }} - name: {{ $var.Name }}
value: {{ $value }} value: {{ $var.Value }}
{{ end }} {{ end }}
{{- end }} {{- end }}
resources: resources:

View File

@ -115,7 +115,7 @@ func (b *BootstrapChannelBuilder) buildAddons() *channelsapi.Addons {
{ {
key := "kops-controller.addons.k8s.io" key := "kops-controller.addons.k8s.io"
version := "1.14.0-alpha.1" version := "1.16.0-alpha.1"
{ {
location := key + "/k8s-1.16.yaml" location := key + "/k8s-1.16.yaml"
@ -129,7 +129,6 @@ func (b *BootstrapChannelBuilder) buildAddons() *channelsapi.Addons {
KubernetesVersion: ">=1.16.0-alpha.0", KubernetesVersion: ">=1.16.0-alpha.0",
Id: id, Id: id,
}) })
manifests[key+"-"+id] = "addons/" + location
} }
} }

View File

@ -40,13 +40,13 @@ func TestBootstrapChannelBuilder_BuildTasks(t *testing.T) {
h.SetupMockAWS() h.SetupMockAWS()
runChannelBuilderTest(t, "simple") runChannelBuilderTest(t, "simple", []string{"dns-controller.addons.k8s.io-k8s-1.12", "kops-controller.addons.k8s.io-k8s-1.16"})
runChannelBuilderTest(t, "kopeio-vxlan") // Use cilium networking, proxy
runChannelBuilderTest(t, "weave") runChannelBuilderTest(t, "cilium", []string{"dns-controller.addons.k8s.io-k8s-1.12", "kops-controller.addons.k8s.io-k8s-1.16"})
runChannelBuilderTest(t, "cilium") runChannelBuilderTest(t, "weave", []string{})
} }
func runChannelBuilderTest(t *testing.T, key string) { func runChannelBuilderTest(t *testing.T, key string, addonManifests []string) {
basedir := path.Join("tests/bootstrapchannelbuilder/", key) basedir := path.Join("tests/bootstrapchannelbuilder/", key)
clusterYamlPath := path.Join(basedir, "cluster.yaml") clusterYamlPath := path.Join(basedir, "cluster.yaml")
@ -122,7 +122,7 @@ func runChannelBuilderTest(t *testing.T, key string) {
testutils.AssertMatchesFile(t, actualManifest, expectedManifestPath) testutils.AssertMatchesFile(t, actualManifest, expectedManifestPath)
} }
for _, k := range []string{"dns-controller.addons.k8s.io-k8s-1.12" /*, "kops-controller.addons.k8s.io-k8s-1.16"*/} { for _, k := range []string{"dns-controller.addons.k8s.io-k8s-1.12", "kops-controller.addons.k8s.io-k8s-1.16"} {
name := cluster.ObjectMeta.Name + "-addons-" + k name := cluster.ObjectMeta.Name + "-addons-" + k
manifestTask := context.Tasks[name] manifestTask := context.Tasks[name]
if manifestTask == nil { if manifestTask == nil {

View File

@ -35,6 +35,7 @@ import (
"strings" "strings"
"text/template" "text/template"
corev1 "k8s.io/api/core/v1"
"k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/dns" "k8s.io/kops/pkg/dns"
"k8s.io/kops/pkg/featureflag" "k8s.io/kops/pkg/featureflag"
@ -42,6 +43,7 @@ import (
"k8s.io/kops/pkg/resources/spotinst" "k8s.io/kops/pkg/resources/spotinst"
"k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/gce" "k8s.io/kops/upup/pkg/fi/cloudup/gce"
"k8s.io/kops/util/pkg/env"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/klog" "k8s.io/klog"
@ -101,6 +103,8 @@ func (tf *TemplateFunctions) AddTo(dest template.FuncMap, secretStore fi.SecretS
dest["ProxyEnv"] = tf.ProxyEnv dest["ProxyEnv"] = tf.ProxyEnv
dest["KopsSystemEnv"] = tf.KopsSystemEnv
dest["DO_TOKEN"] = func() string { dest["DO_TOKEN"] = func() string {
return os.Getenv("DIGITALOCEAN_ACCESS_TOKEN") return os.Getenv("DIGITALOCEAN_ACCESS_TOKEN")
} }
@ -311,3 +315,10 @@ func (tf *TemplateFunctions) ProxyEnv() map[string]string {
} }
return envs return envs
} }
// KopsSystemEnv builds the env vars for a system component
func (tf *TemplateFunctions) KopsSystemEnv() []corev1.EnvVar {
envMap := env.BuildSystemComponentEnvVars(&tf.cluster.Spec)
return envMap.ToEnvVars()
}

View File

@ -0,0 +1,90 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
name: kops-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kops-controller
template:
metadata:
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
spec:
containers:
- command:
- /usr/bin/kops-controller
- --cloud=aws
- --config=memfs://clusters.example.com/minimal.example.com
- --metrics-addr=0
- --v=2
image: kope/kops-controller:1.14.0-alpha.1
name: kops-controller
resources:
requests:
cpu: 50m
memory: 50Mi
dnsPolicy: Default
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/master: ""
serviceAccount: kops-controller
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kops-controller
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: system:serviceaccount:kube-system:kops-controller

View File

@ -4,6 +4,14 @@ metadata:
name: bootstrap name: bootstrap
spec: spec:
addons: addons:
- id: k8s-1.16
kubernetesVersion: '>=1.16.0-alpha.0'
manifest: kops-controller.addons.k8s.io/k8s-1.16.yaml
manifestHash: de5108cf5c9a46a8dc13643428cbaddd0875b948
name: kops-controller.addons.k8s.io
selector:
k8s-addon: kops-controller.addons.k8s.io
version: 1.16.0-alpha.1
- manifest: core.addons.k8s.io/v1.4.0.yaml - manifest: core.addons.k8s.io/v1.4.0.yaml
manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90 manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90
name: core.addons.k8s.io name: core.addons.k8s.io

View File

@ -0,0 +1,99 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
name: kops-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kops-controller
template:
metadata:
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
spec:
containers:
- command:
- /usr/bin/kops-controller
- --cloud=aws
- --config=memfs://clusters.example.com/minimal.example.com
- --metrics-addr=0
- --v=2
env:
- name: NO_PROXY
value: noproxy.example.com,127.0.0.1,localhost,api.minimal.example.com,minimal.example.com,100.64.0.1,100.64.0.0/10,169.254.169.254,172.20.0.0/16
- name: http_proxy
value: http://proxy.example.com
- name: https_proxy
value: http://proxy.example.com
- name: no_proxy
value: noproxy.example.com,127.0.0.1,localhost,api.minimal.example.com,minimal.example.com,100.64.0.1,100.64.0.0/10,169.254.169.254,172.20.0.0/16
image: kope/kops-controller:1.14.0-alpha.1
name: kops-controller
resources:
requests:
cpu: 50m
memory: 50Mi
dnsPolicy: Default
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/master: ""
serviceAccount: kops-controller
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kops-controller
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: system:serviceaccount:kube-system:kops-controller

View File

@ -4,6 +4,14 @@ metadata:
name: bootstrap name: bootstrap
spec: spec:
addons: addons:
- id: k8s-1.16
kubernetesVersion: '>=1.16.0-alpha.0'
manifest: kops-controller.addons.k8s.io/k8s-1.16.yaml
manifestHash: 3b77645897d2641c5ab2de0729b9689b31d63c58
name: kops-controller.addons.k8s.io
selector:
k8s-addon: kops-controller.addons.k8s.io
version: 1.16.0-alpha.1
- manifest: core.addons.k8s.io/v1.4.0.yaml - manifest: core.addons.k8s.io/v1.4.0.yaml
manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90 manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90
name: core.addons.k8s.io name: core.addons.k8s.io

View File

@ -0,0 +1,90 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
name: kops-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kops-controller
template:
metadata:
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
spec:
containers:
- command:
- /usr/bin/kops-controller
- --cloud=aws
- --config=memfs://clusters.example.com/minimal.example.com
- --metrics-addr=0
- --v=2
image: kope/kops-controller:1.14.0-alpha.1
name: kops-controller
resources:
requests:
cpu: 50m
memory: 50Mi
dnsPolicy: Default
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/master: ""
serviceAccount: kops-controller
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kops-controller
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: system:serviceaccount:kube-system:kops-controller

View File

@ -4,6 +4,14 @@ metadata:
name: bootstrap name: bootstrap
spec: spec:
addons: addons:
- id: k8s-1.16
kubernetesVersion: '>=1.16.0-alpha.0'
manifest: kops-controller.addons.k8s.io/k8s-1.16.yaml
manifestHash: de5108cf5c9a46a8dc13643428cbaddd0875b948
name: kops-controller.addons.k8s.io
selector:
k8s-addon: kops-controller.addons.k8s.io
version: 1.16.0-alpha.1
- manifest: core.addons.k8s.io/v1.4.0.yaml - manifest: core.addons.k8s.io/v1.4.0.yaml
manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90 manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90
name: core.addons.k8s.io name: core.addons.k8s.io

View File

@ -0,0 +1,90 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
name: kops-controller
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kops-controller
template:
metadata:
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ""
labels:
k8s-addon: kops-controller.addons.k8s.io
k8s-app: kops-controller
version: v1.16.0-alpha.1
spec:
containers:
- command:
- /usr/bin/kops-controller
- --cloud=aws
- --config=memfs://clusters.example.com/minimal.example.com
- --metrics-addr=0
- --v=2
image: kope/kops-controller:1.14.0-alpha.1
name: kops-controller
resources:
requests:
cpu: 50m
memory: 50Mi
dnsPolicy: Default
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/master: ""
serviceAccount: kops-controller
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
rules:
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-addon: kops-controller.addons.k8s.io
name: kops-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kops-controller
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: system:serviceaccount:kube-system:kops-controller

View File

@ -4,6 +4,14 @@ metadata:
name: bootstrap name: bootstrap
spec: spec:
addons: addons:
- id: k8s-1.16
kubernetesVersion: '>=1.16.0-alpha.0'
manifest: kops-controller.addons.k8s.io/k8s-1.16.yaml
manifestHash: de5108cf5c9a46a8dc13643428cbaddd0875b948
name: kops-controller.addons.k8s.io
selector:
k8s-addon: kops-controller.addons.k8s.io
version: 1.16.0-alpha.1
- manifest: core.addons.k8s.io/v1.4.0.yaml - manifest: core.addons.k8s.io/v1.4.0.yaml
manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90 manifestHash: 3ffe9ac576f9eec72e2bdfbd2ea17d56d9b17b90
name: core.addons.k8s.io name: core.addons.k8s.io