From 732a1613131b0e9d37b98d083a45fe00d1834c0e Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Wed, 14 Oct 2020 08:30:38 +0300 Subject: [PATCH 1/5] Install container runtime packages as assets - Main --- nodeup/pkg/model/containerd.go | 205 ++----------- nodeup/pkg/model/docker.go | 435 ++------------------------- upup/pkg/fi/assetstore.go | 20 +- upup/pkg/fi/cloudup/apply_cluster.go | 16 + upup/pkg/fi/cloudup/containerd.go | 173 +++++++++++ upup/pkg/fi/cloudup/docker.go | 239 +++++++++++++++ 6 files changed, 485 insertions(+), 603 deletions(-) create mode 100644 upup/pkg/fi/cloudup/containerd.go create mode 100644 upup/pkg/fi/cloudup/docker.go diff --git a/nodeup/pkg/model/containerd.go b/nodeup/pkg/model/containerd.go index 2ff867d21d37c..5f40c02ae043b 100644 --- a/nodeup/pkg/model/containerd.go +++ b/nodeup/pkg/model/containerd.go @@ -18,6 +18,8 @@ package model import ( "fmt" + "path/filepath" + "regexp" "strings" "k8s.io/klog/v2" @@ -28,7 +30,6 @@ import ( "k8s.io/kops/pkg/systemd" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" - "k8s.io/kops/util/pkg/architectures" "k8s.io/kops/util/pkg/distributions" ) @@ -39,125 +40,6 @@ type ContainerdBuilder struct { var _ fi.ModelBuilder = &ContainerdBuilder{} -var containerdVersions = []packageVersion{ - // 1.2.4 - Debian Stretch - { - PackageVersion: "1.2.4", - Name: "containerd.io", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "1.2.4-1", - Source: "https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/containerd.io_1.2.4-1_amd64.deb", - Hash: "5d4eeec093bc6f0b35921b88c3939b480acc619c790f4eab001a66efb957e6c1", - }, - - // 1.2.10 - Linux Generic - { - PackageVersion: "1.2.10", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.2.10.linux-amd64.tar.gz", - Hash: "9125a6ae5a89dfe9403fea7d03a8d8ba9fa97b6863ee8698c4e6c258fb14f1fd", - MapFiles: map[string]string{ - "./usr/local/bin": "/usr", - "./usr/local/sbin": "/usr", - }, - }, - - // 1.2.13 - Linux Generic AMD64 - { - PackageVersion: "1.2.13", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.11.tgz", - Hash: "0f4336378f61ed73ed55a356ac19e46699a995f2aff34323ba5874d131548b9e", - MapFiles: map[string]string{ - "docker/c*": "/usr/bin", - "docker/runc": "/usr/bin", - }, - }, - - // 1.2.13 - Linux Generic ARM64 - { - PackageVersion: "1.2.13", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureArm64}, - Source: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.11.tgz", - Hash: "9cd49fe82f6b7ec413b04daef35bc0c87b01d6da67611e5beef36291538d3145", - MapFiles: map[string]string{ - "docker/c*": "/usr/bin", - "docker/runc": "/usr/bin", - }, - }, - - // 1.3.4 - Linux Generic AMD64 - { - PackageVersion: "1.3.4", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.3.4.linux-amd64.tar.gz", - Hash: "4616971c3ad21c24f2f2320fa1c085577a91032a068dd56a41c7c4b71a458087", - MapFiles: map[string]string{ - "./usr/local/bin": "/usr", - "./usr/local/sbin": "/usr", - }, - }, - - // 1.3.7 - Linux Generic AMD64 - { - PackageVersion: "1.3.7", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz", - Hash: "ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8", - MapFiles: map[string]string{ - "docker/c*": "/usr/bin", - "docker/runc": "/usr/bin", - }, - }, - - // 1.3.7 - Linux Generic ARM64 - { - PackageVersion: "1.3.7", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureArm64}, - Source: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz", - Hash: "bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec", - MapFiles: map[string]string{ - "docker/c*": "/usr/bin", - "docker/runc": "/usr/bin", - }, - }, - - // 1.4.1 - Linux Generic AMD64 - { - PackageVersion: "1.4.1", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://github.com/containerd/containerd/releases/download/v1.4.1/cri-containerd-cni-1.4.1-linux-amd64.tar.gz", - Hash: "757efb93a4f3161efc447a943317503d8a7ded5cb4cc0cba3f3318d7ce1542ed", - MapFiles: map[string]string{ - "usr/local/bin": "/usr", - "usr/local/sbin": "/usr", - }, - }, - - // TIP: When adding the next version, copy the previous version, string replace the version and run: - // VERIFY_HASHES=1 go test -v ./nodeup/pkg/model -run TestContainerdPackageHashes - // (you might want to temporarily comment out older versions on a slower connection and then validate) -} - -func (b *ContainerdBuilder) containerdVersion() (string, error) { - containerdVersion := "" - if b.Cluster.Spec.Containerd != nil { - containerdVersion = fi.StringValue(b.Cluster.Spec.Containerd.Version) - } - if containerdVersion == "" { - return "", fmt.Errorf("error finding containerd version") - } - return containerdVersion, nil -} - // Build is responsible for configuring the containerd daemon func (b *ContainerdBuilder) Build(c *fi.ModelBuilderContext) error { if b.skipInstall() { @@ -207,75 +89,22 @@ func (b *ContainerdBuilder) Build(c *fi.ModelBuilderContext) error { c.AddTask(t) } - containerdVersion, err := b.containerdVersion() - if err != nil { - return err - } - - // Add packages - { - count := 0 - for i := range containerdVersions { - dv := &containerdVersions[i] - if !dv.matches(b.Architecture, containerdVersion, b.Distribution) { - continue - } - - count++ - - var packageTask fi.Task - if dv.PlainBinary { - packageTask = &nodetasks.Archive{ - Name: "containerd.io", - Source: dv.Source, - Hash: dv.Hash, - MapFiles: dv.MapFiles, - TargetDir: "/", - } - c.AddTask(packageTask) - } else { - var extraPkgs []*nodetasks.Package - for name, pkg := range dv.ExtraPackages { - dep := &nodetasks.Package{ - Name: name, - Version: s(pkg.Version), - Source: s(pkg.Source), - Hash: s(pkg.Hash), - PreventStart: fi.Bool(true), - } - extraPkgs = append(extraPkgs, dep) - } - packageTask = &nodetasks.Package{ - Name: dv.Name, - Version: s(dv.Version), - Source: s(dv.Source), - Hash: s(dv.Hash), - Deps: extraPkgs, - - // TODO: PreventStart is now unused? - PreventStart: fi.Bool(true), - } - c.AddTask(packageTask) - } - - // As a mitigation for CVE-2019-5736 (possibly a fix, definitely defense-in-depth) we chattr docker-runc to be immutable - for _, f := range dv.MarkImmutable { - c.AddTask(&nodetasks.Chattr{ - File: f, - Mode: "+i", - Deps: []fi.Task{packageTask}, - }) - } - - for _, dep := range dv.Dependencies { - c.AddTask(&nodetasks.Package{Name: dep}) - } - - // Note we do _not_ stop looping... centos/rhel comprises multiple packages + // Add binaries from assets + if b.Cluster.Spec.ContainerRuntime == "containerd" { + f := b.Assets.FindMatches(regexp.MustCompile(`^(\./)?usr/local/(bin/containerd|bin/crictl|bin/ctr|sbin/runc)`)) + if len(f) == 0 { + f = b.Assets.FindMatches(regexp.MustCompile(`^docker/(containerd|ctr|runc)`)) } - - if count == 0 { - klog.Warningf("Did not find containerd package for %s %s %s", b.Distribution, b.Architecture, containerdVersion) + if len(f) == 0 { + return fmt.Errorf("unable to find any containerd binaries in assets") + } + for k, v := range f { + c.AddTask(&nodetasks.File{ + Path: filepath.Join("/usr/bin", k), + Contents: v, + Type: nodetasks.FileType_File, + Mode: fi.String("0755"), + }) } } diff --git a/nodeup/pkg/model/docker.go b/nodeup/pkg/model/docker.go index 01316b17e9896..3be2c51a7dd76 100644 --- a/nodeup/pkg/model/docker.go +++ b/nodeup/pkg/model/docker.go @@ -21,6 +21,8 @@ import ( "fmt" "io/ioutil" "os" + "path/filepath" + "regexp" "strings" "github.com/blang/semver/v4" @@ -32,7 +34,6 @@ import ( "k8s.io/kops/pkg/systemd" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" - "k8s.io/kops/util/pkg/architectures" "k8s.io/kops/util/pkg/distributions" ) @@ -43,348 +44,6 @@ type DockerBuilder struct { var _ fi.ModelBuilder = &DockerBuilder{} -var dockerVersions = []packageVersion{ - // 17.03.2 - k8s 1.8 - - // 17.03.2 - Debian9 (stretch) - { - PackageVersion: "17.03.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "17.03.2~ce-0~debian-stretch", - Source: "http://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.03.2~ce-0~debian-stretch_amd64.deb", - Hash: "6f19489aba744dc02ce5fd9a65c0a2e3049b9f7a61cf70747ce33752094b0961", - MarkImmutable: []string{"/usr/bin/docker-runc"}, - }, - - // 17.03.2 - Xenial - { - PackageVersion: "17.03.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionUbuntu1604}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "17.03.2~ce-0~ubuntu-xenial", - Source: "http://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb", - Hash: "68851f4a395c63b79b34e17ba5582379621389bbc9ea53cf34f70ea9839888fb", - MarkImmutable: []string{"/usr/bin/docker-runc"}, - }, - - // 17.03.2 - Ubuntu Bionic via binary download (no packages available) - { - PackageVersion: "17.03.2", - PlainBinary: true, - Distros: []distributions.Distribution{distributions.DistributionUbuntu1804}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "http://download.docker.com/linux/static/stable/x86_64/docker-17.03.2-ce.tgz", - Hash: "183b31b001e7480f3c691080486401aa519101a5cfe6e05ad01b9f5521c4112d", - MarkImmutable: []string{"/usr/bin/docker-runc"}, - }, - - // 17.03.2 - Centos / Rhel7 (two packages) - { - PackageVersion: "17.03.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionRhel7, distributions.DistributionCentos7, distributions.DistributionAmazonLinux2}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "17.03.2.ce", - Source: "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm", - Hash: "0ead9d0db5c15e3123d3194f71f716a1d6e2a70c984b12a5dde4a72e6e483aca", - ExtraPackages: map[string]packageInfo{ - "docker-ce-selinux": { - Version: "17.03.2.ce", - Source: "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm", - Hash: "07e6cbaf0133468769f5bc7b8b14b2ef72b812ce62948be0989a2ea28463e4df", - }, - }, - MarkImmutable: []string{"/usr/bin/docker-runc"}, - }, - // 17.09.0 - k8s 1.8 - - // 17.09.0 - Debian9 (stretch) - { - PackageVersion: "17.09.0", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "17.09.0~ce-0~debian", - Source: "http://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.0~ce-0~debian_amd64.deb", - Hash: "80aa1429dc4d57eb6d73c291ab5feff5005f21d8402b1979e1e49db06eef52b0", - }, - - // 17.09.0 - Xenial - { - PackageVersion: "17.09.0", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionUbuntu1604}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "17.09.0~ce-0~ubuntu", - Source: "http://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.09.0~ce-0~ubuntu_amd64.deb", - Hash: "d33f6eb134f0ab0876148bd96de95ea47d583d7f2cddfdc6757979453f9bd9bf", - }, - - // 18.06.2 - Xenial - { - PackageVersion: "18.06.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionUbuntu1604}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.2~ce~3-0~ubuntu", - Source: "https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.06.2~ce~3-0~ubuntu_amd64.deb", - Hash: "1c52a80430d4dda213a01e6859e7c403b4bebe642accaa6358f5c75f5f2ba682", - }, - - // 17.09.0 - Centos / Rhel7 (two packages) - { - PackageVersion: "17.09.0", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionRhel7, distributions.DistributionCentos7, distributions.DistributionAmazonLinux2}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "17.09.0.ce", - Source: "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm", - Hash: "be342f205c3fc99258e3903bfd3c79dc7f7c337c9321b217f4789dfdfbcac8f9", - }, - - // 18.03.1 - Bionic - { - PackageVersion: "18.03.1", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionUbuntu1804}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.03.1~ce~3-0~ubuntu", - Source: "https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_18.03.1~ce~3-0~ubuntu_amd64.deb", - Hash: "a8d69913a38df46d768f5d4e87e1230d6a1b7ccb4f9098a4fd9357a518f34be0", - }, - - // 18.06.2 - Bionic - { - PackageVersion: "18.06.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionUbuntu1804}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.2~ce~3-0~ubuntu", - Source: "https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_18.06.2~ce~3-0~ubuntu_amd64.deb", - Hash: "056afb4440b8f2ae52841ee228d7794176fcb81aae0ba5614ecb7b4de6e4db9d", - }, - - // 18.06.1 - Debian Stretch - { - PackageVersion: "18.06.1", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.1~ce~3-0~debian", - Source: "https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_18.06.1~ce~3-0~debian_amd64.deb", - Hash: "00a09a8993efd8095bd1817442db86c27de9720d7d5ade36aa52cd91198fa83d", - }, - - // 18.06.2 - Debian Stretch - { - - PackageVersion: "18.06.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.2~ce~3-0~debian", - Source: "https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_18.06.2~ce~3-0~debian_amd64.deb", - Hash: "cbbd2afc85b2a46d55abfd5d362595e39a54022b6c6baab0a5ddc4a85a74e318", - }, - - // 18.06.1 - CentOS / Rhel7 (two packages) - { - PackageVersion: "18.06.1", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionRhel7, distributions.DistributionCentos7, distributions.DistributionAmazonLinux2}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.1.ce", - Source: "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm", - Hash: "352909b3df327d10a6ee27e2c6ee8638d90481ee93580ae79c9d1ff7530a196e", - }, - - // 18.09.3 - Debian Stretch - { - PackageVersion: "18.09.3", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "5:18.09.3~3-0~debian-stretch", - Source: "https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_18.09.3~3-0~debian-stretch_amd64.deb", - Hash: "a941c03d0e7027481e4ff6cd5c77b871c4bf97df76e6444396e004adb759795d", - ExtraPackages: map[string]packageInfo{ - "docker-ce-cli": { - Version: "5:18.09.3~3-0~debian-stretch", - Source: "https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce-cli_18.09.3~3-0~debian-stretch_amd64.deb", - Hash: "6102a5de3d1039226fd3d7ec44316371455efb211cfaacda8346d8d5155ffb0c", - }, - }, - }, - - // 18.06.2 - CentOS / Rhel7 (two packages) - { - PackageVersion: "18.06.2", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionRhel7, distributions.DistributionCentos7, distributions.DistributionAmazonLinux2}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.2.ce", - Source: "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.2.ce-3.el7.x86_64.rpm", - Hash: "0e5d98c359d93e8a892a07ab1f8eb8153964b535cadda61a8791ca2db3c6b76c", - }, - - // 18.06.3 - Kubernetes 1.12+ - - // 18.06.3 - Xenial - { - PackageVersion: "18.06.3", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionUbuntu1604}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.3~ce~3-0~ubuntu", - Source: "https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.06.3~ce~3-0~ubuntu_amd64.deb", - Hash: "6e9da7303cfa7ef7d4d8035bdc205229dd84e572f29957a9fb36e1351fe88a24", - }, - - // 18.06.3 - Bionic / Focal - { - PackageVersion: "18.06.3", - Name: "docker-ce", - Distros: []distributions.Distribution{ - distributions.DistributionUbuntu1804, - distributions.DistributionUbuntu2004, - }, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.3~ce~3-0~ubuntu", - Source: "https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_18.06.3~ce~3-0~ubuntu_amd64.deb", - Hash: "f8cc02112a125007f5c70f009ce9a91dd536018f139131074ee55cea555ba85d", - }, - - // 18.06.3 - Debian Stretch - { - PackageVersion: "18.06.3", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian9}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.3~ce~3-0~debian", - Source: "https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_18.06.3~ce~3-0~debian_amd64.deb", - Hash: "0de184cc79d9f9c99b2a6fa4fdd8b29645e9a858106a9814bb11047073a4e8cb", - }, - - // 18.06.3 - Debian Buster - { - PackageVersion: "18.06.3", - Name: "docker-ce", - Distros: []distributions.Distribution{distributions.DistributionDebian10}, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.3~ce~3-0~debian", - Source: "https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce_18.06.3~ce~3-0~debian_amd64.deb", - Hash: "0c8ca09635553f0c6cb70a08bdef6f3b8d89b1247e4dab54896c93aad3bf3f25", - }, - - // 18.06.3 - Amazon Linux 2 / CentOS 7 / CentOS 8 / RHEL 7 / RHEL 8 - { - PackageVersion: "18.06.3", - Name: "docker-ce", - Distros: []distributions.Distribution{ - distributions.DistributionAmazonLinux2, - distributions.DistributionCentos7, - distributions.DistributionCentos8, - distributions.DistributionRhel7, - distributions.DistributionRhel8, - }, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Version: "18.06.3.ce", - Source: "https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.3.ce-3.el7.x86_64.rpm", - Hash: "f3703698cab918ab41b1244f699c8718a5e3bf4070fdf4894b5b6e8d92545a62", - }, - - // 18.09.9 - Linux Generic - Kubernetes 1.16+ - { - PackageVersion: "18.09.9", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-18.09.9.tgz", - Hash: "82a362af7689038c51573e0fd0554da8703f0d06f4dfe95dd5bda5acf0ae45fb", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // 19.03.4 - Linux Generic - { - PackageVersion: "19.03.4", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.4.tgz", - Hash: "efef2ad32d262674501e712351be0df9dd31d6034b175d0020c8f5d5c9c3fd10", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // 19.03.8 - Linux Generic - { - PackageVersion: "19.03.8", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.8.tgz", - Hash: "7f4115dc6a3c19c917f8b9664d7b51c904def1c984e082c4600097433323cf6f", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // 19.03.11 - Linux Generic AMD64 - Kubernetes 1.17+ - { - PackageVersion: "19.03.11", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.11.tgz", - Hash: "0f4336378f61ed73ed55a356ac19e46699a995f2aff34323ba5874d131548b9e", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // 19.03.11 - Linux Generic ARM64 - Kubernetes 1.17+ - { - PackageVersion: "19.03.11", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureArm64}, - Source: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.11.tgz", - Hash: "9cd49fe82f6b7ec413b04daef35bc0c87b01d6da67611e5beef36291538d3145", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // 19.03.13 - Linux Generic AMD64 - Kubernetes 1.19+ - { - PackageVersion: "19.03.13", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, - Source: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz", - Hash: "ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // 19.03.13 - Linux Generic ARM64 - Kubernetes 1.19+ - { - PackageVersion: "19.03.13", - PlainBinary: true, - Architectures: []architectures.Architecture{architectures.ArchitectureArm64}, - Source: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz", - Hash: "bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec", - MapFiles: map[string]string{ - "docker/docker*": "/usr/bin", - }, - }, - - // TIP: When adding the next version, copy the previous version, string replace the version and run: - // VERIFY_HASHES=1 go test -v ./nodeup/pkg/model -run TestDockerPackageHashes - // (you might want to temporarily comment out older versions on a slower connection and then validate) -} - func (b *DockerBuilder) dockerVersion() (string, error) { dockerVersion := "" if b.Cluster.Spec.Docker != nil { @@ -420,6 +79,26 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error { return nil } + c.AddTask(b.buildDockerGroup()) + c.AddTask(b.buildSystemdSocket()) + + // Add binaries from assets + { + f := b.Assets.FindMatches(regexp.MustCompile(`^docker/`)) + if len(f) == 0 { + return fmt.Errorf("unable to find any Docker binaries in assets") + } + for k, v := range f { + klog.V(4).Infof("Found matching Docker asset: %q", k) + c.AddTask(&nodetasks.File{ + Path: filepath.Join("/usr/bin", k), + Contents: v, + Type: nodetasks.FileType_File, + Mode: fi.String("0755"), + }) + } + } + // Add Apache2 license { t := &nodetasks.File{ @@ -435,76 +114,6 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error { return err } - // Add packages - { - count := 0 - for i := range dockerVersions { - dv := &dockerVersions[i] - if !dv.matches(b.Architecture, dockerVersion, b.Distribution) { - continue - } - - count++ - - var packageTask fi.Task - if dv.PlainBinary { - packageTask = &nodetasks.Archive{ - Name: "docker-ce", - Source: dv.Source, - Hash: dv.Hash, - MapFiles: dv.MapFiles, - TargetDir: "/", - } - c.AddTask(packageTask) - - c.AddTask(b.buildDockerGroup()) - c.AddTask(b.buildSystemdSocket()) - } else { - var extraPkgs []*nodetasks.Package - for name, pkg := range dv.ExtraPackages { - dep := &nodetasks.Package{ - Name: name, - Version: s(pkg.Version), - Source: s(pkg.Source), - Hash: s(pkg.Hash), - PreventStart: fi.Bool(true), - } - extraPkgs = append(extraPkgs, dep) - } - packageTask = &nodetasks.Package{ - Name: dv.Name, - Version: s(dv.Version), - Source: s(dv.Source), - Hash: s(dv.Hash), - Deps: extraPkgs, - - // TODO: PreventStart is now unused? - PreventStart: fi.Bool(true), - } - c.AddTask(packageTask) - } - - // As a mitigation for CVE-2019-5736 (possibly a fix, definitely defense-in-depth) we chattr docker-runc to be immutable - for _, f := range dv.MarkImmutable { - c.AddTask(&nodetasks.Chattr{ - File: f, - Mode: "+i", - Deps: []fi.Task{packageTask}, - }) - } - - for _, dep := range dv.Dependencies { - c.AddTask(&nodetasks.Package{Name: dep}) - } - - // Note we do _not_ stop looping... centos/rhel comprises multiple packages - } - - if count == 0 { - klog.Warningf("Did not find docker package for %s %s %s", b.Distribution, b.Architecture, dockerVersion) - } - } - v, err := semver.ParseTolerant(dockerVersion) if err != nil { return fmt.Errorf("error parsing docker version %q: %v", dockerVersion, err) diff --git a/upup/pkg/fi/assetstore.go b/upup/pkg/fi/assetstore.go index 9123d461a7cd4..e46e777a05bc6 100644 --- a/upup/pkg/fi/assetstore.go +++ b/upup/pkg/fi/assetstore.go @@ -24,6 +24,7 @@ import ( "os/exec" "path" "path/filepath" + "regexp" "strconv" "strings" "time" @@ -98,6 +99,21 @@ func NewAssetStore(cacheDir string) *AssetStore { } return a } + +func (a *AssetStore) FindMatches(expr *regexp.Regexp) map[string]Resource { + matches := make(map[string]Resource) + + klog.Infof("Matching assets:") + for _, a := range a.assets { + if expr.MatchString(a.AssetPath) { + klog.Infof(" %s", a.AssetPath) + matches[a.Key] = &assetResource{Asset: a} + } + } + + return matches +} + func (a *AssetStore) Find(key string, assetPath string) (Resource, error) { var matches []*asset for _, asset := range a.assets { @@ -130,10 +146,10 @@ func (a *AssetStore) Find(key string, assetPath string) (Resource, error) { } // Add an asset into the store, in one of the recognized formats (see Assets in types package) -func (a *AssetStore) AddForTest(id string, content string) { +func (a *AssetStore) AddForTest(id string, path string, content string) { a.assets = append(a.assets, &asset{ Key: id, - AssetPath: "/path/to/" + id + "/asset", + AssetPath: path, resource: NewStringResource(content), }) } diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go index 8ca371e70059c..779b08f804094 100644 --- a/upup/pkg/fi/cloudup/apply_cluster.go +++ b/upup/pkg/fi/cloudup/apply_cluster.go @@ -63,6 +63,7 @@ import ( "k8s.io/kops/upup/pkg/fi/cloudup/openstack" "k8s.io/kops/upup/pkg/fi/cloudup/terraform" "k8s.io/kops/util/pkg/architectures" + "k8s.io/kops/util/pkg/hashing" "k8s.io/kops/util/pkg/vfs" ) @@ -1095,6 +1096,21 @@ func (c *ApplyClusterCmd) addFileAssets(assetBuilder *assets.AssetBuilder) error c.Assets[arch] = append(c.Assets[arch], BuildMirroredAsset(lyftAsset, lyftAssetHash)) } + var containerRuntimeAssetUrl *url.URL + var containerRuntimeAssetHash *hashing.Hash + switch c.Cluster.Spec.ContainerRuntime { + case "docker": + containerRuntimeAssetUrl, containerRuntimeAssetHash, err = findDockerAssets(c.Cluster, assetBuilder, arch) + case "containerd": + containerRuntimeAssetUrl, containerRuntimeAssetHash, err = findContainerdAssets(c.Cluster, assetBuilder, arch) + default: + err = fmt.Errorf("unknown container runtime: %q", c.Cluster.Spec.ContainerRuntime) + } + if err != nil { + return err + } + c.Assets[arch] = append(c.Assets[arch], BuildMirroredAsset(containerRuntimeAssetUrl, containerRuntimeAssetHash)) + asset, err := NodeUpAsset(assetBuilder, arch) if err != nil { return err diff --git a/upup/pkg/fi/cloudup/containerd.go b/upup/pkg/fi/cloudup/containerd.go new file mode 100644 index 0000000000000..6147246b2eed3 --- /dev/null +++ b/upup/pkg/fi/cloudup/containerd.go @@ -0,0 +1,173 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cloudup + +import ( + "fmt" + "net/url" + + "github.com/blang/semver/v4" + + "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/pkg/assets" + "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/util/pkg/architectures" + "k8s.io/kops/util/pkg/hashing" +) + +const ( + // containerd packages URLs for v1.4.x+ + containerdVersionUrlAmd64 = "https://github.com/containerd/containerd/releases/download/v%s/cri-containerd-cni-%s-linux-amd64.tar.gz" + // containerd legacy packages URLs for v1.2.x and v1.3.x + containerdLegacyUrlAmd64 = "https://storage.googleapis.com/cri-containerd-release/cri-containerd-%s.linux-amd64.tar.gz" + // containerd version that is available for both AMD64 and ARM64, used in case the selected version is not available for ARM64 + containerdFallbackVersion = "1.2.13" +) + +func findContainerdAssets(c *kops.Cluster, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*url.URL, *hashing.Hash, error) { + if c.Spec.Containerd == nil || fi.StringValue(c.Spec.Containerd.Version) == "" { + return nil, nil, fmt.Errorf("unable to find containerd version") + } + + version := fi.StringValue(c.Spec.Containerd.Version) + + assetUrl, assetHash, err := findContainerdVersionUrlHash(arch, version) + if err != nil { + return nil, nil, err + } + + return findAssetsUrlHash(assetBuilder, assetUrl, assetHash) +} + +func findContainerdVersionUrlHash(arch architectures.Architecture, version string) (u string, h string, e error) { + var containerdAssetUrl, containerdAssetHash string + + if findAllContainerdHashesAmd64()[version] != "" { + var err error + containerdAssetUrl, err = findContainerdVersionUrl(arch, version) + if err != nil { + return "", "", err + } + containerdAssetHash, err = findContainerdVersionHash(arch, version) + if err != nil { + return "", "", err + } + } else { + // Fall back to Docker packages + dv := findAllContainerdDockerMappings()[version] + if dv != "" { + var err error + containerdAssetUrl, err = findDockerVersionUrl(arch, dv) + if err != nil { + return "", "", err + } + containerdAssetHash, err = findDockerVersionHash(arch, dv) + if err != nil { + return "", "", err + } + println(dv) + } else { + return "", "", fmt.Errorf("unknown url and hash for containerd version: %s - %s", arch, version) + } + } + + return containerdAssetUrl, containerdAssetHash, nil +} + +func findContainerdVersionUrl(arch architectures.Architecture, version string) (string, error) { + sv, err := semver.ParseTolerant(version) + if err != nil { + return "", fmt.Errorf("unable to parse version string: %q", version) + } + if sv.LT(semver.MustParse("1.3.4")) { + return "", fmt.Errorf("unsupported legacy containerd version: %q", version) + } + + var u string + switch arch { + case architectures.ArchitectureAmd64: + if sv.GTE(semver.MustParse("1.4.0")) { + u = fmt.Sprintf(containerdVersionUrlAmd64, version, version) + } else { + u = fmt.Sprintf(containerdLegacyUrlAmd64, version) + } + case architectures.ArchitectureArm64: + // For now there are only official AMD64 builds, using Default Docker version instead + if findAllContainerdHashesAmd64()[version] != "" { + u = fmt.Sprintf(dockerVersionUrlArm64, findAllContainerdDockerMappings()[containerdFallbackVersion]) + } + default: + return "", fmt.Errorf("unknown arch: %q", arch) + } + + if u == "" { + return "", fmt.Errorf("unknown url for containerd version: %s - %s", arch, version) + } + + return u, nil +} + +func findContainerdVersionHash(arch architectures.Architecture, version string) (string, error) { + sv, err := semver.ParseTolerant(version) + if err != nil { + return "", fmt.Errorf("unable to parse version string: %q", version) + } + if sv.LT(semver.MustParse("1.3.4")) { + return "", fmt.Errorf("unsupported legacy containerd version: %q", version) + } + + var h string + switch arch { + case architectures.ArchitectureAmd64: + h = findAllContainerdHashesAmd64()[version] + case architectures.ArchitectureArm64: + // For now there are only official AMD64 builds, using Default Docker version instead + if findAllContainerdHashesAmd64()[version] != "" { + h = findAllDockerHashesArm64()[findAllContainerdDockerMappings()[containerdFallbackVersion]] + } + default: + return "", fmt.Errorf("unknown arch: %q", arch) + } + + if h == "" { + return "", fmt.Errorf("unknown hash for containerd version: %s - %s", arch, version) + } + + return h, nil +} + +func findAllContainerdHashesAmd64() map[string]string { + hashes := map[string]string{ + "1.3.4": "4616971c3ad21c24f2f2320fa1c085577a91032a068dd56a41c7c4b71a458087", + "1.4.0": "b379f29417efd583f77e095173d4d0bd6bb001f0081b2a63d152ee7aef653ce1", + "1.4.1": "757efb93a4f3161efc447a943317503d8a7ded5cb4cc0cba3f3318d7ce1542ed", + } + + return hashes +} + +func findAllContainerdDockerMappings() map[string]string { + versions := map[string]string{ + "1.2.6": "19.03.2", + "1.2.10": "19.03.5", + "1.2.12": "19.03.6", + "1.2.13": "19.03.12", + "1.3.7": "19.03.13", + } + + return versions +} diff --git a/upup/pkg/fi/cloudup/docker.go b/upup/pkg/fi/cloudup/docker.go new file mode 100644 index 0000000000000..7d3eaafd80f40 --- /dev/null +++ b/upup/pkg/fi/cloudup/docker.go @@ -0,0 +1,239 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cloudup + +import ( + "fmt" + "net/url" + + "github.com/blang/semver/v4" + + "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/pkg/assets" + "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/util/pkg/architectures" + "k8s.io/kops/util/pkg/hashing" +) + +const ( + // Docker packages URLs for v18.09.0+ + dockerVersionUrlAmd64 = "https://download.docker.com/linux/static/stable/x86_64/docker-%s.tgz" + dockerVersionUrlArm64 = "https://download.docker.com/linux/static/stable/aarch64/docker-%s.tgz" + // Docker legacy AMD64 packages URLs for v17.03.0 to v18.06.3 + dockerLegacyUrlAmd64 = "https://download.docker.com/linux/static/stable/x86_64/docker-%s-ce.tgz" + // Docker legacy ARM64 packages URLs for v17.09.0 to v18.06.3 + dockerLegacyUrlArm64 = "https://download.docker.com/linux/static/stable/aarch64/docker-%s-ce.tgz" + // Docker version that is available for both AMD64 and ARM64, used in case the selected version is too old and not available for ARM64 + dockerFallbackVersion = "17.09.0" +) + +func findDockerAssets(c *kops.Cluster, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*url.URL, *hashing.Hash, error) { + if c.Spec.Docker == nil || fi.StringValue(c.Spec.Docker.Version) == "" { + return nil, nil, fmt.Errorf("unable to find Docker version") + } + + version := fi.StringValue(c.Spec.Docker.Version) + + assetUrl, assetHash, err := findDockerVersionUrlHash(arch, version) + if err != nil { + return nil, nil, err + } + + return findAssetsUrlHash(assetBuilder, assetUrl, assetHash) +} + +func findDockerVersionUrlHash(arch architectures.Architecture, version string) (u string, h string, e error) { + dockerAssetUrl, err := findDockerVersionUrl(arch, version) + if err != nil { + return "", "", err + } + dockerAssetHash, err := findDockerVersionHash(arch, version) + if err != nil { + return "", "", err + } + + return dockerAssetUrl, dockerAssetHash, nil +} + +func findDockerVersionUrl(arch architectures.Architecture, version string) (string, error) { + sv, err := semver.ParseTolerant(version) + if err != nil { + return "", fmt.Errorf("unable to parse version string: %q", version) + } + if sv.LT(semver.MustParse("17.3.0")) { + return "", fmt.Errorf("unsupported legacy Docker version: %q", version) + } + + var u string + switch arch { + case architectures.ArchitectureAmd64: + if sv.GTE(semver.MustParse("18.9.0")) { + u = fmt.Sprintf(dockerVersionUrlAmd64, version) + } else { + u = fmt.Sprintf(dockerLegacyUrlAmd64, version) + } + case architectures.ArchitectureArm64: + if sv.GTE(semver.MustParse("18.9.0")) { + u = fmt.Sprintf(dockerVersionUrlArm64, version) + } else if sv.GTE(semver.MustParse("17.9.0")) { + u = fmt.Sprintf(dockerLegacyUrlArm64, version) + } else { + u = fmt.Sprintf(dockerLegacyUrlArm64, dockerFallbackVersion) + } + default: + return "", fmt.Errorf("unknown arch: %q", arch) + } + + return u, nil +} + +func findDockerVersionHash(arch architectures.Architecture, version string) (string, error) { + sv, err := semver.ParseTolerant(version) + if err != nil { + return "", fmt.Errorf("unable to parse version string: %q", version) + } + if sv.LT(semver.MustParse("17.3.0")) { + return "", fmt.Errorf("unsupported legacy Docker version: %q", version) + } + + var h string + switch arch { + case architectures.ArchitectureAmd64: + h = findAllDockerHashesAmd64()[version] + case architectures.ArchitectureArm64: + if sv.GTE(semver.MustParse("17.9.0")) { + h = findAllDockerHashesArm64()[version] + } else { + h = findAllDockerHashesArm64()[dockerFallbackVersion] + } + default: + return "", fmt.Errorf("unknown arch: %q", arch) + } + + if h == "" { + return "", fmt.Errorf("unknown hash for Docker version: %s - %s", arch, version) + } + + return h, nil +} + +func findAllDockerHashesAmd64() map[string]string { + hashes := map[string]string{ + "17.03.0": "aac08524db82d3fdc8fc092f495e1174f5e1dd774b95a6d081544997d34b4855", + "17.03.1": "3e070e7b34e99cf631f44d0ff5cf9a127c0b8af5c53dfc3e1fce4f9615fbf603", + "17.03.2": "183b31b001e7480f3c691080486401aa519101a5cfe6e05ad01b9f5521c4112d", + "17.06.0": "e582486c9db0f4229deba9f8517145f8af6c5fae7a1243e6b07876bd3e706620", + "17.06.1": "e35fe12806eadbb7eb8aa63e3dfb531bda5f901cd2c14ac9cdcd54df6caed697", + "17.06.2": "a15f62533e773c40029a61784a5a1c5bc7dd21e0beb5402fda109f80e1f2994d", + "17.09.0": "a9e90a73c3cdfbf238f148e1ec0eaff5eb181f92f35bdd938fd7dab18e1c4647", + "17.09.1": "77d3eaa72f2b63c94ea827b548f4a8b572b754a431c59258e3f2730411f64be7", + "17.12.0": "692e1c72937f6214b1038def84463018d8e320c8eaf8530546c84c2f8f9c767d", + "17.12.1": "1270dce1bd7e1838d62ae21d2505d87f16efc1d9074645571daaefdfd0c14054", + "18.03.0": "e5dff6245172081dbf14285dafe4dede761f8bc1750310156b89928dbf56a9ee", + "18.03.1": "0e245c42de8a21799ab11179a4fce43b494ce173a8a2d6567ea6825d6c5265aa", + "18.06.0": "1c2fa625496465c68b856db0ba850eaad7a16221ca153661ca718de4a2217705", + "18.06.1": "83be159cf0657df9e1a1a4a127d181725a982714a983b2bdcc0621244df93687", + "18.06.2": "a979d9a952fae474886c7588da692ee00684cb2421d2c633c7ed415948cf0b10", + "18.06.3": "346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822", + "18.09.0": "08795696e852328d66753963249f4396af2295a7fe2847b839f7102e25e47cb9", + "18.09.1": "c9959e42b637fb7362899ac1d1aeef2a966fa0ea85631da91f4c4a7a9ec29644", + "18.09.2": "183e10448f0c3a0dc82c9d504c5280c29527b89af0fc71cb27115d684b26c8bd", + "18.09.3": "8b886106cfc362f1043debfe178c35b6f73ec42380b034a3919a235fe331e053", + "18.09.4": "7baf380a9d503286b3745114e0d8e265897edd9642747b1992459e550fc5c827", + "18.09.5": "99ca9395e9c7ffbf75537de71aa828761f492491d02bc6e29db2920fa582c6c5", + "18.09.6": "1f3f6774117765279fce64ee7f76abbb5f260264548cf80631d68fb2d795bb09", + "18.09.7": "e106ccfa2b1f60794faaa6bae57a2dac9dc4cb33e5541fad6a826ea525d01cc4", + "18.09.8": "12277eff64363f51ba2f20dd258bdc2c3248022996c0251921193ec6fd179e52", + "18.09.9": "82a362af7689038c51573e0fd0554da8703f0d06f4dfe95dd5bda5acf0ae45fb", + "19.03.0": "b7bb0c3610b3f6ee87457dfb440968dbcc3537198c3d6e2468fcf90819855d6f", + "19.03.1": "6e7d8e24ee46b13d7547d751696d01607d19c8224c1b2c867acc8c779e77734b", + "19.03.2": "865038730c79ab48dfed1365ee7627606405c037f46c9ae17c5ec1f487da1375", + "19.03.3": "c3c8833e227b61fe6ce0bc5c17f97fa547035bef4ef17cf6601f30b0f20f4ce5", + "19.03.4": "efef2ad32d262674501e712351be0df9dd31d6034b175d0020c8f5d5c9c3fd10", + "19.03.5": "50cdf38749642ec43d6ac50f4a3f1f7f6ac688e8d8b4e1c5b7be06e1a82f06e9", + "19.03.6": "34ff89ce917796594cd81149b1777d07786d297ffd0fef37a796b5897052f7cc", + "19.03.7": "033e97ae6b31e21c598fd089ea034c08d75dc744ceb787898d63dfc4e45ead03", + "19.03.8": "7f4115dc6a3c19c917f8b9664d7b51c904def1c984e082c4600097433323cf6f", + "19.03.9": "1c03c78be198d9085e7dd6806fc5d93264baaf0c7ea17f584d00af48eae508ee", + "19.03.10": "7c1576a0bc749418d1423d2b78c8920b5d61f849789904612862dd118742e82b", + "19.03.11": "0f4336378f61ed73ed55a356ac19e46699a995f2aff34323ba5874d131548b9e", + "19.03.12": "88de1b87b8a2582fe827154899475a72fb707c5793cfb39d2a24813ba1f31197", + "19.03.13": "ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8", + } + + return hashes +} + +func findAllDockerHashesArm64() map[string]string { + hashes := map[string]string{ + "17.09.0": "2af5d112ab514d9b0b84d9e7360a5e7633e88b7168d1bbfc16c6532535cb0123", + "17.09.1": "a254b0f7d6fb32c786e272f7b042e010e9cae8e168ad34f7f7cca146f07e03e9", + "17.12.0": "b740a4475205ba8a0eb74262171be91f5a18f75554d5922d8247bf40e551f013", + "17.12.1": "79ec237e1ae7e2194aa13908b37fd8ccddaf2f2039d26a0be1a7bbd5d4ea3dff", + "18.03.0": "096522d1c9979dab76458bb443e9266d9f77c7c725fe6cffe3de31aca19c08f9", + "18.03.1": "483a25771d859a492ff253070471c75e062c1b43e5c3a4961fe1ac508e1ffe2c", + "18.06.0": "3cb454a5a5d999dff2daac0bb5d060c1fb9cf7beab3327a44e446b09f14cca58", + "18.06.1": "57582655ee7fe05913ffa347518c82f126321e7d71945bb6440d6f059e21528c", + "18.06.2": "6e7875fef7e96146c4f8994fcc24be028ec72f9f8f9ee2a832b3972dbc51d406", + "18.06.3": "defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4", + "18.09.0": "c5e20dccb8ac02f2da30755ece2f4a29497afc274685835e7a6093f0cb813565", + "18.09.1": "3b94859ca5aa735292d31e32d7e5e33710da92de332b68348967565fc6d8d345", + "18.09.2": "458968bc8a4d4d3003097924c27fcfff0abdf8e52b7d3e9f6e09072c1dd42095", + "18.09.3": "b80971843aed5b0fdc478de6886499cdac7b34df059b7b46606643d1bdb64fc7", + "18.09.4": "177582a220a0a674ea5ebf6c770db6527d7f5cfb1c3811c6118bd2aed7fbc826", + "18.09.5": "549ea10709d9ed22b6435a072ea2d9dd7fc14950eb141cfbdd4653d0c12a54e2", + "18.09.6": "c4857639514471e2d1aa6d567880b7fc226437ede462021ed44157d4dcd11dc8", + "18.09.7": "961bbf1f826565e17dbcf5f89e8707ab4300139337920f8db1306dac5a9b6bb7", + "18.09.8": "243f74025612ca940f7c4c151f98a87f87a71da7e6fdce92794401906ddbffc8", + "18.09.9": "c6f4cfe1bef71c339d5127c6c79169479bcb7830c6fb0185139d32ab726e038e", + "19.03.0": "88bcbe5898b999d67cf158d5d57dd8e3d905a6cdbca669e696b6ff7554057d21", + "19.03.1": "44158b9fe44e8b5d3c1226a5d880425850d6f8ec383e4cf053f401e1a8fc269d", + "19.03.2": "3bd1bbd2e2eebf0083d684f02217e9215c1475f4ffecd28f824efc2e8585d670", + "19.03.3": "d6abb961d5c71a9a15b067de796c581f6ae8ee79044a6d98d529912095853ea7", + "19.03.4": "03c10ddd2862234d47c434455af7d27979c91448445ed3658cf383455b56e1a2", + "19.03.5": "0deddac5ae6f18ff0e6ce6a143c2cfd99c56dfb58be507770d840240fc9c51a9", + "19.03.6": "3840f64aad8f4d63851ef2d3401eb08471f8a46fb13382ae0d49913eac196f1f", + "19.03.7": "730058a50102dbf9278e5d164c385a437016c8c8201d6d19195d9321d0a70ec9", + "19.03.8": "b19da81ca82123aa0b9191c1f19c0c2632cc50d5f8c2cdb04e5b5976e3268b3b", + "19.03.9": "5d6ede3368eac8e74ead70489aa7e4e663fe1ccfbb9763a6ac55991d55b70354", + "19.03.10": "c949aef8c40beea732ec497d27b8d203799ee0f34b0d330c7001d57601e5c34d", + "19.03.11": "9cd49fe82f6b7ec413b04daef35bc0c87b01d6da67611e5beef36291538d3145", + "19.03.12": "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + "19.03.13": "bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec", + } + + return hashes +} + +func findAssetsUrlHash(assetBuilder *assets.AssetBuilder, assetUrl string, assetHash string) (*url.URL, *hashing.Hash, error) { + u, err := url.Parse(assetUrl) + if err != nil { + return nil, nil, fmt.Errorf("unable to parse asset URL %q: %v", assetUrl, err) + } + + h, err := hashing.FromString(assetHash) + if err != nil { + return nil, nil, fmt.Errorf("unable to parse asset hash %q: %v", assetHash, err) + } + + u, err = assetBuilder.RemapFileAndSHAValue(u, assetHash) + if err != nil { + return nil, nil, fmt.Errorf("unable to remap asset: %v", err) + } + + return u, h, nil +} From 852bebe165d5027c0a0011c71cbf8c047098d29b Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Wed, 14 Oct 2020 08:31:46 +0300 Subject: [PATCH 2/5] Install container runtime packages as assets - Misc --- nodeup/pkg/model/context.go | 33 ++++++----- nodeup/pkg/model/convenience.go | 81 +------------------------- pkg/apis/kops/validation/validation.go | 35 +++++++++-- pkg/model/components/containerd.go | 31 ++++------ upup/pkg/fi/cloudup/BUILD.bazel | 4 ++ 5 files changed, 66 insertions(+), 118 deletions(-) diff --git a/nodeup/pkg/model/context.go b/nodeup/pkg/model/context.go index 2edf112c5b7a9..e3b5f4cf391ca 100644 --- a/nodeup/pkg/model/context.go +++ b/nodeup/pkg/model/context.go @@ -20,6 +20,7 @@ import ( "fmt" "os" "path/filepath" + "regexp" "strings" "k8s.io/klog/v2" @@ -598,29 +599,31 @@ func (c *NodeupModelContext) GetPrivateKey(name string) ([]byte, error) { func (b *NodeupModelContext) AddCNIBinAssets(c *fi.ModelBuilderContext, assetNames []string) error { for _, assetName := range assetNames { - if err := b.addCNIBinAsset(c, assetName); err != nil { + re, err := regexp.Compile(fmt.Sprintf("^%s$", assetName)) + if err != nil { + return err + } + if err := b.addCNIBinAsset(c, re); err != nil { return err } } return nil } -func (b *NodeupModelContext) addCNIBinAsset(c *fi.ModelBuilderContext, assetName string) error { - assetPath := "" - asset, err := b.Assets.Find(assetName, assetPath) - if err != nil { - return fmt.Errorf("error trying to locate asset %q: %v", assetName, err) - } - if asset == nil { - return fmt.Errorf("unable to locate asset %q", assetName) +func (b *NodeupModelContext) addCNIBinAsset(c *fi.ModelBuilderContext, assetPath *regexp.Regexp) error { + a := b.Assets.FindMatches(assetPath) + if len(a) != 1 { + return fmt.Errorf("unable to locate asset %q", assetPath.String()) } - c.AddTask(&nodetasks.File{ - Path: filepath.Join(b.CNIBinDir(), assetName), - Contents: asset, - Type: nodetasks.FileType_File, - Mode: fi.String("0755"), - }) + for k, v := range a { + c.AddTask(&nodetasks.File{ + Path: filepath.Join(b.CNIBinDir(), k), + Contents: v, + Type: nodetasks.FileType_File, + Mode: fi.String("0755"), + }) + } return nil } diff --git a/nodeup/pkg/model/convenience.go b/nodeup/pkg/model/convenience.go index e423176d228a3..1c526ef82809d 100644 --- a/nodeup/pkg/model/convenience.go +++ b/nodeup/pkg/model/convenience.go @@ -21,13 +21,10 @@ import ( "sort" "strconv" - "k8s.io/kops/pkg/apis/kops" - "k8s.io/kops/upup/pkg/fi" - "k8s.io/kops/util/pkg/architectures" - "k8s.io/kops/util/pkg/distributions" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/upup/pkg/fi" ) // s is a helper that builds a *string from a string value @@ -109,77 +106,3 @@ func addHostPathVolume(pod *v1.Pod, container *v1.Container, hostPath v1.HostPat func convEtcdSettingsToMs(dur *metav1.Duration) string { return strconv.FormatInt(dur.Nanoseconds()/1000000, 10) } - -// packageInfo - fields required for extra packages setup -type packageInfo struct { - Version string // Package version - Source string // URL to download the package from - Hash string // sha1sum of the package file -} - -// packageVersion - fields required for downloaded packages setup -type packageVersion struct { - Name string - - // Version is the version of docker, as specified in the kops - Version string - - // Source is the url where the package/tarfile can be found - Source string - - // Hash is the sha1 hash of the file - Hash string - - // Extra packages to install during the same dpkg/yum transaction. - // This is used for: - // - On RHEL/CentOS, the SELinux policy needs to be installed. - // - Starting from Docker 18.09, the Docker package has been split in 3 - // separate packages: one for the daemon, one for the CLI, one for - // containerd. All 3 must be installed at the same time when - // upgrading from an older version of Docker. - ExtraPackages map[string]packageInfo - - PackageVersion string - Distros []distributions.Distribution - // List of dependencies that can be installed using the system's package - // manager (e.g. apt-get install or yum install). - Dependencies []string - Architectures []architectures.Architecture - - // PlainBinary indicates that the Source is not an OS, but a "bare" tar.gz - PlainBinary bool - // MapFiles is the list of files to extract with corresponding directories for PlainBinary - MapFiles map[string]string - - // MarkImmutable is a list of files on which we should perform a `chattr +i ` - MarkImmutable []string -} - -// Match package version against configured values -func (d *packageVersion) matches(arch architectures.Architecture, packageVersion string, distro distributions.Distribution) bool { - if d.PackageVersion != packageVersion { - return false - } - foundDistro := false - if len(d.Distros) > 0 { - for _, d := range d.Distros { - if d == distro { - foundDistro = true - } - } - } else { - // Distro list is empty, assuming ANY - foundDistro = true - } - if !foundDistro { - return false - } - - foundArch := false - for _, a := range d.Architectures { - if a == arch { - foundArch = true - } - } - return foundArch -} diff --git a/pkg/apis/kops/validation/validation.go b/pkg/apis/kops/validation/validation.go index 5571fbd039547..c258388aafa31 100644 --- a/pkg/apis/kops/validation/validation.go +++ b/pkg/apis/kops/validation/validation.go @@ -185,6 +185,10 @@ func validateClusterSpec(spec *kops.ClusterSpec, c *kops.Cluster, fieldPath *fie allErrs = append(allErrs, validateContainerRuntime(&spec.ContainerRuntime, fieldPath.Child("containerRuntime"))...) } + if spec.Containerd != nil { + allErrs = append(allErrs, validateContainerdConfig(spec.Containerd, fieldPath.Child("containerd"))...) + } + if spec.Docker != nil { allErrs = append(allErrs, validateDockerConfig(spec.Docker, fieldPath.Child("docker"))...) } @@ -1055,16 +1059,37 @@ func validateContainerRuntime(runtime *string, fldPath *field.Path) field.ErrorL return allErrs } +func validateContainerdConfig(config *kops.ContainerdConfig, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if config.Version != nil { + sv, err := semver.ParseTolerant(*config.Version) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, + fmt.Sprintf("unable to parse version string: %s", err.Error()))) + } + if sv.LT(semver.MustParse("1.2.6")) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, "unsupported legacy version")) + } + } + + return allErrs +} + func validateDockerConfig(config *kops.DockerConfig, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if config.Version != nil { - if strings.HasPrefix(*config.Version, "1.1") { + sv, err := semver.ParseTolerant(*config.Version) + if err != nil { allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, - "version is no longer available: https://www.docker.com/blog/changes-dockerproject-org-apt-yum-repositories/")) - } else { - valid := []string{"17.03.2", "17.09.0", "18.03.1", "18.06.1", "18.06.2", "18.06.3", "18.09.3", "18.09.9", "19.03.4", "19.03.8", "19.03.11", "19.03.13"} - allErrs = append(allErrs, IsValidValue(fldPath.Child("version"), config.Version, valid)...) + fmt.Sprintf("unable to parse version string: %s", err.Error()))) + } + if sv.LT(semver.MustParse("1.14.0")) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, + "version is no longer available: https://www.docker.com/blog/changes-dockerproject-org-apt-yum-repositories")) + } else if sv.LT(semver.MustParse("17.3.0")) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, "unsupported legacy version")) } } diff --git a/pkg/model/components/containerd.go b/pkg/model/components/containerd.go index 114144931a8ea..8e6b41f9bdb3b 100644 --- a/pkg/model/components/containerd.go +++ b/pkg/model/components/containerd.go @@ -20,6 +20,8 @@ import ( "fmt" "strings" + "github.com/blang/semver/v4" + "k8s.io/klog/v2" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/upup/pkg/fi" @@ -80,26 +82,17 @@ func (b *ContainerdOptionsBuilder) BuildOptions(o interface{}) error { } } else if clusterSpec.ContainerRuntime == "docker" { - if fi.StringValue(containerd.Version) == "" { - // Docker version should always be available - if fi.StringValue(clusterSpec.Docker.Version) == "" { - return fmt.Errorf("docker version is required") + // Docker version should always be available + dockerVersion := fi.StringValue(clusterSpec.Docker.Version) + if dockerVersion == "" { + return fmt.Errorf("docker version is required") + } else { + // Skip containerd setup for older versions without containerd service + sv, err := semver.ParseTolerant(dockerVersion) + if err != nil { + return fmt.Errorf("unable to parse version string: %q", dockerVersion) } - - // Set the containerd version for known Docker versions - switch fi.StringValue(clusterSpec.Docker.Version) { - case "19.03.13": - containerd.Version = fi.String("1.3.7") - case "19.03.8", "19.03.11": - containerd.Version = fi.String("1.2.13") - case "19.03.4": - containerd.Version = fi.String("1.2.10") - case "18.09.9": - containerd.Version = fi.String("1.2.10") - case "18.09.3": - containerd.Version = fi.String("1.2.4") - default: - // Old version of docker, single package + if sv.LT(semver.MustParse("18.9.0")) { containerd.SkipInstall = true return nil } diff --git a/upup/pkg/fi/cloudup/BUILD.bazel b/upup/pkg/fi/cloudup/BUILD.bazel index eb764e1311f5b..88e7c9a726ab6 100644 --- a/upup/pkg/fi/cloudup/BUILD.bazel +++ b/upup/pkg/fi/cloudup/BUILD.bazel @@ -5,8 +5,10 @@ go_library( srcs = [ "apply_cluster.go", "bootstrapchannelbuilder.go", + "containerd.go", "defaults.go", "dns.go", + "docker.go", "loader.go", "networking.go", "new_cluster.go", @@ -98,9 +100,11 @@ go_test( size = "small", srcs = [ "bootstrapchannelbuilder_test.go", + "containerd_test.go", "deepvalidate_test.go", "defaults_test.go", "dns_test.go", + "docker_test.go", "networking_test.go", "new_cluster_test.go", "populatecluster_test.go", From b27431d86f42ef3638faf72f744ecf3c47449845 Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Wed, 14 Oct 2020 08:32:33 +0300 Subject: [PATCH 3/5] Install container runtime packages as assets - Tests --- hack/verify-hashes.sh | 2 +- nodeup/pkg/model/BUILD.bazel | 1 - nodeup/pkg/model/containerd_test.go | 48 +-- nodeup/pkg/model/docker_test.go | 150 +-------- nodeup/pkg/model/kubectl_test.go | 2 +- .../tests/containerdbuilder/simple/tasks.yaml | 64 +++- .../dockerbuilder/docker_18.06.3/tasks.yaml | 91 +++++- .../dockerbuilder/docker_19.03.11/tasks.yaml | 71 ++++- .../dockerbuilder/healthcheck/tasks.yaml | 94 +++++- .../tests/dockerbuilder/logflags/tasks.yaml | 94 +++++- .../tests/dockerbuilder/simple/tasks.yaml | 94 +++++- upup/pkg/fi/cloudup/containerd_test.go | 289 +++++++++++++++++ upup/pkg/fi/cloudup/docker_test.go | 292 ++++++++++++++++++ 13 files changed, 1071 insertions(+), 221 deletions(-) create mode 100644 upup/pkg/fi/cloudup/containerd_test.go create mode 100644 upup/pkg/fi/cloudup/docker_test.go diff --git a/hack/verify-hashes.sh b/hack/verify-hashes.sh index 7e46bfc9689b5..c3ea7814936f3 100755 --- a/hack/verify-hashes.sh +++ b/hack/verify-hashes.sh @@ -23,4 +23,4 @@ set -o pipefail cd "${KOPS_ROOT}" # Verify package hashes for Containerd and Docker -VERIFY_HASHES=1 go test -v ./nodeup/pkg/model -run PackageHashes +VERIFY_HASHES=1 go test -v ./upup/pkg/fi/cloudup -run VersionsHashes diff --git a/nodeup/pkg/model/BUILD.bazel b/nodeup/pkg/model/BUILD.bazel index 2d3af9a752727..350dd322376a6 100644 --- a/nodeup/pkg/model/BUILD.bazel +++ b/nodeup/pkg/model/BUILD.bazel @@ -116,7 +116,6 @@ go_test( "//util/pkg/architectures:go_default_library", "//util/pkg/distributions:go_default_library", "//util/pkg/exec:go_default_library", - "//util/pkg/hashing:go_default_library", "//util/pkg/vfs:go_default_library", "//vendor/github.com/blang/semver/v4:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/nodeup/pkg/model/containerd_test.go b/nodeup/pkg/model/containerd_test.go index 8d10a5395b151..cb186a7383d90 100644 --- a/nodeup/pkg/model/containerd_test.go +++ b/nodeup/pkg/model/containerd_test.go @@ -17,7 +17,6 @@ limitations under the License. package model import ( - "os" "path" "path/filepath" "testing" @@ -29,40 +28,6 @@ import ( "k8s.io/kops/util/pkg/distributions" ) -func TestContainerdPackageNames(t *testing.T) { - for _, containerdVersion := range containerdVersions { - if containerdVersion.PlainBinary { - continue - } - - sanityCheckPackageName(t, containerdVersion.Source, containerdVersion.Version, containerdVersion.Name) - - for k, p := range containerdVersion.ExtraPackages { - sanityCheckPackageName(t, p.Source, p.Version, k) - } - } -} - -func TestContainerdPackageHashes(t *testing.T) { - if os.Getenv("VERIFY_HASHES") == "" { - t.Skip("VERIFY_HASHES not set, won't download & verify docker hashes") - } - - for _, containerdVersion := range containerdVersions { - t.Run(containerdVersion.Source, func(t *testing.T) { - if err := verifyPackageHash(containerdVersion.Source, containerdVersion.Hash, containerdVersion.Version); err != nil { - t.Errorf("error verifying package %q: %v", containerdVersion.Source, err) - } - - for _, p := range containerdVersion.ExtraPackages { - if err := verifyPackageHash(p.Source, p.Hash, p.Version); err != nil { - t.Errorf("error verifying package %q: %v", p.Source, err) - } - } - }) - } -} - func TestContainerdBuilder_Simple(t *testing.T) { runContainerdBuilderTest(t, "simple") } @@ -154,12 +119,23 @@ func runContainerdBuilderTest(t *testing.T, key string) { basedir := path.Join("tests/containerdbuilder/", key) nodeUpModelContext, err := BuildNodeupModelContext(basedir) - nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 if err != nil { t.Fatalf("error parsing cluster yaml %q: %v", basedir, err) return } + nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 + + nodeUpModelContext.Assets = fi.NewAssetStore("") + nodeUpModelContext.Assets.AddForTest("containerd", "usr/local/bin/containerd", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("containerd-shim", "usr/local/bin/containerd-shim", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("containerd-shim-runc-v1", "usr/local/bin/containerd-shim-runc-v1", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("containerd-shim-runc-v2", "usr/local/bin/containerd-shim-runc-v2", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("crictl", "usr/local/bin/crictl", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("critest", "usr/local/bin/critest", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("ctr", "usr/local/bin/ctr", "testing containerd content") + nodeUpModelContext.Assets.AddForTest("runc", "usr/local/sbin/runc", "testing containerd content") + context := &fi.ModelBuilderContext{ Tasks: make(map[string]fi.Task), } diff --git a/nodeup/pkg/model/docker_test.go b/nodeup/pkg/model/docker_test.go index 4e7bebd8bd78c..6b1d192ce2b77 100644 --- a/nodeup/pkg/model/docker_test.go +++ b/nodeup/pkg/model/docker_test.go @@ -17,12 +17,8 @@ limitations under the License. package model import ( - "fmt" - "os" - "os/exec" "path" "path/filepath" - "strings" "testing" "k8s.io/kops/pkg/apis/kops" @@ -30,141 +26,8 @@ import ( "k8s.io/kops/pkg/testutils" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/util/pkg/distributions" - "k8s.io/kops/util/pkg/hashing" ) -func TestDockerPackageNames(t *testing.T) { - for _, dockerVersion := range dockerVersions { - if dockerVersion.PlainBinary { - continue - } - - sanityCheckPackageName(t, dockerVersion.Source, dockerVersion.Version, dockerVersion.Name) - - for k, p := range dockerVersion.ExtraPackages { - sanityCheckPackageName(t, p.Source, p.Version, k) - } - } -} - -func sanityCheckPackageName(t *testing.T, u string, version string, name string) { - filename := u - lastSlash := strings.LastIndex(filename, "/") - if lastSlash != -1 { - filename = filename[lastSlash+1:] - } - - expectedNames := []string{} - // Match known RPM formats - for _, v := range []string{"-1.", "-2.", "-3.", "-3.2."} { - for _, d := range []string{"el7", "el7.centos", "el7_6"} { - for _, a := range []string{"noarch", "x86_64"} { - expectedNames = append(expectedNames, name+"-"+version+v+d+"."+a+".rpm") - } - } - } - - // Match known DEB formats - for _, a := range []string{"amd64", "armhf"} { - expectedNames = append(expectedNames, name+"_"+version+"_"+a+".deb") - // Not entirely clear why some (docker) debian packages have this '5:' prefix - expectedNames = append(expectedNames, name+"_"+strings.TrimPrefix(version, "5:")+"_"+a+".deb") - } - - found := false - for _, s := range expectedNames { - if s == filename { - found = true - } - } - if !found { - t.Errorf("unexpected name=%q, version=%q for %s", name, version, u) - } -} - -func TestDockerPackageHashes(t *testing.T) { - if os.Getenv("VERIFY_HASHES") == "" { - t.Skip("VERIFY_HASHES not set, won't download & verify docker hashes") - } - - for _, dockerVersion := range dockerVersions { - t.Run(dockerVersion.Source, func(t *testing.T) { - if err := verifyPackageHash(dockerVersion.Source, dockerVersion.Hash, dockerVersion.Version); err != nil { - t.Errorf("error verifying package %q: %v", dockerVersion.Source, err) - } - - for _, p := range dockerVersion.ExtraPackages { - if err := verifyPackageHash(p.Source, p.Hash, p.Version); err != nil { - t.Errorf("error verifying package %q: %v", p.Source, err) - } - } - }) - } -} - -func verifyPackageHash(u string, hash string, expectedVersion string) error { - name := path.Base(u) - p := filepath.Join("/tmp", name) - - expectedHash, err := hashing.FromString(hash) - if err != nil { - return err - } - - if _, err := fi.DownloadURL(u, p, expectedHash); err != nil { - return err - } - - actualHash, err := hashing.HashAlgorithmSHA256.HashFile(p) - if err != nil { - return fmt.Errorf("error hashing file: %v", err) - } - - if hash != actualHash.Hex() { - return fmt.Errorf("hash was %q, expected %q", actualHash.Hex(), hash) - } - - if strings.HasSuffix(u, ".deb") { - cmd := exec.Command("dpkg-deb", "-I", p) - out, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("error running 'dpkg-deb -I %s': %v", p, err) - } - - version := "" - for _, line := range strings.Split(string(out), "\n") { - line = strings.TrimSpace(line) - if !strings.HasPrefix(line, "Version: ") { - continue - } - version += strings.TrimPrefix(line, "Version: ") - } - if expectedVersion != version { - return fmt.Errorf("unexpected version, actual=%q, expected=%q", version, expectedVersion) - } - - } else if strings.HasSuffix(u, ".rpm") { - cmd := exec.Command("rpm", "-qp", "--queryformat", "%{VERSION}", "--nosignature", p) - out, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("error running rpm %s: %v", strings.Join(cmd.Args, " "), err) - } - - version := strings.TrimSpace(string(out)) - if expectedVersion != version { - return fmt.Errorf("unexpected version, actual=%q, expected=%q", version, expectedVersion) - } - } else if strings.HasSuffix(u, ".tgz") || strings.HasSuffix(u, ".tar.gz") { - if expectedVersion != "" { - return fmt.Errorf("did not expect version for tgz / tar.gz package") - } - } else { - return fmt.Errorf("unexpected suffix for file (known: .rpm .deb .tar.gz .tgz)") - } - - return nil -} - func TestDockerBuilder_Simple(t *testing.T) { runDockerBuilderTest(t, "simple") } @@ -250,12 +113,23 @@ func runDockerBuilderTest(t *testing.T, key string) { basedir := path.Join("tests/dockerbuilder/", key) nodeUpModelContext, err := BuildNodeupModelContext(basedir) - nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 if err != nil { t.Fatalf("error parsing cluster yaml %q: %v", basedir, err) return } + nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 + + nodeUpModelContext.Assets = fi.NewAssetStore("") + nodeUpModelContext.Assets.AddForTest("containerd", "docker/containerd", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("containerd-shim", "docker/containerd-shim", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("ctr", "docker/ctr", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker", "docker/docker", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-init", "docker/docker-init", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-proxy", "docker/docker-proxy", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("dockerd", "docker/dockerd", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("runc", "docker/runc", "testing Docker content") + context := &fi.ModelBuilderContext{ Tasks: make(map[string]fi.Task), } diff --git a/nodeup/pkg/model/kubectl_test.go b/nodeup/pkg/model/kubectl_test.go index 839e0770c6b31..8256cb221e5d2 100644 --- a/nodeup/pkg/model/kubectl_test.go +++ b/nodeup/pkg/model/kubectl_test.go @@ -25,7 +25,7 @@ import ( func TestKubectlBuilder(t *testing.T) { RunGoldenTest(t, "tests/golden/minimal", "kubectl", func(nodeupModelContext *NodeupModelContext, target *fi.ModelBuilderContext) error { nodeupModelContext.Assets = fi.NewAssetStore("") - nodeupModelContext.Assets.AddForTest("kubectl", "testing kubectl content") + nodeupModelContext.Assets.AddForTest("kubectl", "/path/to/kubectl/asset", "testing kubectl content") builder := KubectlBuilder{NodeupModelContext: nodeupModelContext} return builder.Build(target) }) diff --git a/nodeup/pkg/model/tests/containerdbuilder/simple/tasks.yaml b/nodeup/pkg/model/tests/containerdbuilder/simple/tasks.yaml index d8ed50798a8a5..33f2884456c35 100644 --- a/nodeup/pkg/model/tests/containerdbuilder/simple/tasks.yaml +++ b/nodeup/pkg/model/tests/containerdbuilder/simple/tasks.yaml @@ -1,11 +1,3 @@ -Name: containerd.io -hash: 9125a6ae5a89dfe9403fea7d03a8d8ba9fa97b6863ee8698c4e6c258fb14f1fd -mapFiles: - ./usr/local/bin: /usr - ./usr/local/sbin: /usr -source: https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.2.10.linux-amd64.tar.gz -target: / ---- contents: |- { "cniVersion": "0.3.1", @@ -38,6 +30,62 @@ contents: CONTAINERD_OPTS= path: /etc/sysconfig/containerd type: file --- +contents: + Asset: + AssetPath: usr/local/bin/containerd + Key: containerd +mode: "0755" +path: /usr/bin/containerd +type: file +--- +contents: + Asset: + AssetPath: usr/local/bin/containerd-shim + Key: containerd-shim +mode: "0755" +path: /usr/bin/containerd-shim +type: file +--- +contents: + Asset: + AssetPath: usr/local/bin/containerd-shim-runc-v1 + Key: containerd-shim-runc-v1 +mode: "0755" +path: /usr/bin/containerd-shim-runc-v1 +type: file +--- +contents: + Asset: + AssetPath: usr/local/bin/containerd-shim-runc-v2 + Key: containerd-shim-runc-v2 +mode: "0755" +path: /usr/bin/containerd-shim-runc-v2 +type: file +--- +contents: + Asset: + AssetPath: usr/local/bin/crictl + Key: crictl +mode: "0755" +path: /usr/bin/crictl +type: file +--- +contents: + Asset: + AssetPath: usr/local/bin/ctr + Key: ctr +mode: "0755" +path: /usr/bin/ctr +type: file +--- +contents: + Asset: + AssetPath: usr/local/sbin/runc + Key: runc +mode: "0755" +path: /usr/bin/runc +type: file +--- contents: |2 diff --git a/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml index 859e8401f8524..7d593dabc6a24 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml @@ -72,6 +72,70 @@ mode: "0755" path: /opt/kops/bin/docker-healthcheck type: file --- +contents: + Asset: + AssetPath: docker/containerd + Key: containerd +mode: "0755" +path: /usr/bin/containerd +type: file +--- +contents: + Asset: + AssetPath: docker/containerd-shim + Key: containerd-shim +mode: "0755" +path: /usr/bin/containerd-shim +type: file +--- +contents: + Asset: + AssetPath: docker/ctr + Key: ctr +mode: "0755" +path: /usr/bin/ctr +type: file +--- +contents: + Asset: + AssetPath: docker/docker + Key: docker +mode: "0755" +path: /usr/bin/docker +type: file +--- +contents: + Asset: + AssetPath: docker/docker-init + Key: docker-init +mode: "0755" +path: /usr/bin/docker-init +type: file +--- +contents: + Asset: + AssetPath: docker/docker-proxy + Key: docker-proxy +mode: "0755" +path: /usr/bin/docker-proxy +type: file +--- +contents: + Asset: + AssetPath: docker/dockerd + Key: dockerd +mode: "0755" +path: /usr/bin/dockerd +type: file +--- +contents: + Asset: + AssetPath: docker/runc + Key: runc +mode: "0755" +path: /usr/bin/runc +type: file +--- contents: |2 @@ -268,11 +332,9 @@ contents: |2 path: /usr/share/doc/docker/apache.txt type: file --- -Name: docker-ce -hash: 6e9da7303cfa7ef7d4d8035bdc205229dd84e572f29957a9fb36e1351fe88a24 -preventStart: true -source: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.06.3~ce~3-0~ubuntu_amd64.deb -version: 18.06.3~ce~3-0~ubuntu +GID: null +Name: docker +System: true --- Name: docker-healthcheck.service definition: | @@ -341,3 +403,22 @@ enabled: true manageState: true running: true smartRestart: true +--- +Name: docker.socket +definition: | + [Unit] + Description=Docker Socket for the API + PartOf=docker.service + + [Socket] + ListenStream=/var/run/docker.sock + SocketMode=0660 + SocketUser=root + SocketGroup=docker + + [Install] + WantedBy=sockets.target +enabled: true +manageState: true +running: true +smartRestart: true diff --git a/nodeup/pkg/model/tests/dockerbuilder/docker_19.03.11/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/docker_19.03.11/tasks.yaml index 90f55fcd869fd..4d758d6dd7a9a 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/docker_19.03.11/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/docker_19.03.11/tasks.yaml @@ -1,16 +1,73 @@ -Name: docker-ce -hash: 0f4336378f61ed73ed55a356ac19e46699a995f2aff34323ba5874d131548b9e -mapFiles: - docker/docker*: /usr/bin -source: https://download.docker.com/linux/static/stable/x86_64/docker-19.03.11.tgz -target: / ---- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 path: /etc/sysconfig/docker type: file --- +contents: + Asset: + AssetPath: docker/containerd + Key: containerd +mode: "0755" +path: /usr/bin/containerd +type: file +--- +contents: + Asset: + AssetPath: docker/containerd-shim + Key: containerd-shim +mode: "0755" +path: /usr/bin/containerd-shim +type: file +--- +contents: + Asset: + AssetPath: docker/ctr + Key: ctr +mode: "0755" +path: /usr/bin/ctr +type: file +--- +contents: + Asset: + AssetPath: docker/docker + Key: docker +mode: "0755" +path: /usr/bin/docker +type: file +--- +contents: + Asset: + AssetPath: docker/docker-init + Key: docker-init +mode: "0755" +path: /usr/bin/docker-init +type: file +--- +contents: + Asset: + AssetPath: docker/docker-proxy + Key: docker-proxy +mode: "0755" +path: /usr/bin/docker-proxy +type: file +--- +contents: + Asset: + AssetPath: docker/dockerd + Key: dockerd +mode: "0755" +path: /usr/bin/dockerd +type: file +--- +contents: + Asset: + AssetPath: docker/runc + Key: runc +mode: "0755" +path: /usr/bin/runc +type: file +--- contents: |2 diff --git a/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml index c8517c5c823ca..7d593dabc6a24 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml @@ -1,6 +1,3 @@ -file: /usr/bin/docker-runc -mode: +i ---- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -75,6 +72,70 @@ mode: "0755" path: /opt/kops/bin/docker-healthcheck type: file --- +contents: + Asset: + AssetPath: docker/containerd + Key: containerd +mode: "0755" +path: /usr/bin/containerd +type: file +--- +contents: + Asset: + AssetPath: docker/containerd-shim + Key: containerd-shim +mode: "0755" +path: /usr/bin/containerd-shim +type: file +--- +contents: + Asset: + AssetPath: docker/ctr + Key: ctr +mode: "0755" +path: /usr/bin/ctr +type: file +--- +contents: + Asset: + AssetPath: docker/docker + Key: docker +mode: "0755" +path: /usr/bin/docker +type: file +--- +contents: + Asset: + AssetPath: docker/docker-init + Key: docker-init +mode: "0755" +path: /usr/bin/docker-init +type: file +--- +contents: + Asset: + AssetPath: docker/docker-proxy + Key: docker-proxy +mode: "0755" +path: /usr/bin/docker-proxy +type: file +--- +contents: + Asset: + AssetPath: docker/dockerd + Key: dockerd +mode: "0755" +path: /usr/bin/dockerd +type: file +--- +contents: + Asset: + AssetPath: docker/runc + Key: runc +mode: "0755" +path: /usr/bin/runc +type: file +--- contents: |2 @@ -271,11 +332,9 @@ contents: |2 path: /usr/share/doc/docker/apache.txt type: file --- -Name: docker-ce -hash: 68851f4a395c63b79b34e17ba5582379621389bbc9ea53cf34f70ea9839888fb -preventStart: true -source: http://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb -version: 17.03.2~ce-0~ubuntu-xenial +GID: null +Name: docker +System: true --- Name: docker-healthcheck.service definition: | @@ -344,3 +403,22 @@ enabled: true manageState: true running: true smartRestart: true +--- +Name: docker.socket +definition: | + [Unit] + Description=Docker Socket for the API + PartOf=docker.service + + [Socket] + ListenStream=/var/run/docker.sock + SocketMode=0660 + SocketUser=root + SocketGroup=docker + + [Install] + WantedBy=sockets.target +enabled: true +manageState: true +running: true +smartRestart: true diff --git a/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml index c8517c5c823ca..7d593dabc6a24 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml @@ -1,6 +1,3 @@ -file: /usr/bin/docker-runc -mode: +i ---- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -75,6 +72,70 @@ mode: "0755" path: /opt/kops/bin/docker-healthcheck type: file --- +contents: + Asset: + AssetPath: docker/containerd + Key: containerd +mode: "0755" +path: /usr/bin/containerd +type: file +--- +contents: + Asset: + AssetPath: docker/containerd-shim + Key: containerd-shim +mode: "0755" +path: /usr/bin/containerd-shim +type: file +--- +contents: + Asset: + AssetPath: docker/ctr + Key: ctr +mode: "0755" +path: /usr/bin/ctr +type: file +--- +contents: + Asset: + AssetPath: docker/docker + Key: docker +mode: "0755" +path: /usr/bin/docker +type: file +--- +contents: + Asset: + AssetPath: docker/docker-init + Key: docker-init +mode: "0755" +path: /usr/bin/docker-init +type: file +--- +contents: + Asset: + AssetPath: docker/docker-proxy + Key: docker-proxy +mode: "0755" +path: /usr/bin/docker-proxy +type: file +--- +contents: + Asset: + AssetPath: docker/dockerd + Key: dockerd +mode: "0755" +path: /usr/bin/dockerd +type: file +--- +contents: + Asset: + AssetPath: docker/runc + Key: runc +mode: "0755" +path: /usr/bin/runc +type: file +--- contents: |2 @@ -271,11 +332,9 @@ contents: |2 path: /usr/share/doc/docker/apache.txt type: file --- -Name: docker-ce -hash: 68851f4a395c63b79b34e17ba5582379621389bbc9ea53cf34f70ea9839888fb -preventStart: true -source: http://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb -version: 17.03.2~ce-0~ubuntu-xenial +GID: null +Name: docker +System: true --- Name: docker-healthcheck.service definition: | @@ -344,3 +403,22 @@ enabled: true manageState: true running: true smartRestart: true +--- +Name: docker.socket +definition: | + [Unit] + Description=Docker Socket for the API + PartOf=docker.service + + [Socket] + ListenStream=/var/run/docker.sock + SocketMode=0660 + SocketUser=root + SocketGroup=docker + + [Install] + WantedBy=sockets.target +enabled: true +manageState: true +running: true +smartRestart: true diff --git a/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml index c8517c5c823ca..7d593dabc6a24 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml @@ -1,6 +1,3 @@ -file: /usr/bin/docker-runc -mode: +i ---- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -75,6 +72,70 @@ mode: "0755" path: /opt/kops/bin/docker-healthcheck type: file --- +contents: + Asset: + AssetPath: docker/containerd + Key: containerd +mode: "0755" +path: /usr/bin/containerd +type: file +--- +contents: + Asset: + AssetPath: docker/containerd-shim + Key: containerd-shim +mode: "0755" +path: /usr/bin/containerd-shim +type: file +--- +contents: + Asset: + AssetPath: docker/ctr + Key: ctr +mode: "0755" +path: /usr/bin/ctr +type: file +--- +contents: + Asset: + AssetPath: docker/docker + Key: docker +mode: "0755" +path: /usr/bin/docker +type: file +--- +contents: + Asset: + AssetPath: docker/docker-init + Key: docker-init +mode: "0755" +path: /usr/bin/docker-init +type: file +--- +contents: + Asset: + AssetPath: docker/docker-proxy + Key: docker-proxy +mode: "0755" +path: /usr/bin/docker-proxy +type: file +--- +contents: + Asset: + AssetPath: docker/dockerd + Key: dockerd +mode: "0755" +path: /usr/bin/dockerd +type: file +--- +contents: + Asset: + AssetPath: docker/runc + Key: runc +mode: "0755" +path: /usr/bin/runc +type: file +--- contents: |2 @@ -271,11 +332,9 @@ contents: |2 path: /usr/share/doc/docker/apache.txt type: file --- -Name: docker-ce -hash: 68851f4a395c63b79b34e17ba5582379621389bbc9ea53cf34f70ea9839888fb -preventStart: true -source: http://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb -version: 17.03.2~ce-0~ubuntu-xenial +GID: null +Name: docker +System: true --- Name: docker-healthcheck.service definition: | @@ -344,3 +403,22 @@ enabled: true manageState: true running: true smartRestart: true +--- +Name: docker.socket +definition: | + [Unit] + Description=Docker Socket for the API + PartOf=docker.service + + [Socket] + ListenStream=/var/run/docker.sock + SocketMode=0660 + SocketUser=root + SocketGroup=docker + + [Install] + WantedBy=sockets.target +enabled: true +manageState: true +running: true +smartRestart: true diff --git a/upup/pkg/fi/cloudup/containerd_test.go b/upup/pkg/fi/cloudup/containerd_test.go new file mode 100644 index 0000000000000..d0f4e5c092df8 --- /dev/null +++ b/upup/pkg/fi/cloudup/containerd_test.go @@ -0,0 +1,289 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cloudup + +import ( + "fmt" + "os" + "reflect" + "testing" + + "k8s.io/kops/util/pkg/architectures" +) + +func TestContainerdVersionUrlHash(t *testing.T) { + tests := []struct { + version string + arch architectures.Architecture + hash string + url string + err error + }{ + { + arch: architectures.ArchitectureAmd64, + version: "1.3.4", + url: "https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.3.4.linux-amd64.tar.gz", + hash: "4616971c3ad21c24f2f2320fa1c085577a91032a068dd56a41c7c4b71a458087", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.3.4", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", + hash: "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + err: nil, + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.3.7", + url: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz", + hash: "ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.3.7", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz", + hash: "bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec", + err: nil, + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.4.1", + url: "https://github.com/containerd/containerd/releases/download/v1.4.1/cri-containerd-cni-1.4.1-linux-amd64.tar.gz", + hash: "757efb93a4f3161efc447a943317503d8a7ded5cb4cc0cba3f3318d7ce1542ed", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.4.1", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", + hash: "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + err: nil, + }, + } + for _, test := range tests { + t.Run(fmt.Sprintf("%s-%s", test.version, test.arch), func(t *testing.T) { + url, hash, err := findContainerdVersionUrlHash(test.arch, test.version) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("actual error %q differs from expected error %q", err, test.err) + return + } + if url != test.url { + t.Errorf("actual url %q differs from expected url %q", url, test.url) + return + } + if hash != test.hash { + t.Errorf("actual hash %q differs from expected hash %q", hash, test.hash) + return + } + }) + } +} + +func TestContainerdVersionUrl(t *testing.T) { + tests := []struct { + version string + arch architectures.Architecture + url string + err error + }{ + { + arch: "", + version: "1.4.1", + url: "", + err: fmt.Errorf("unknown arch: \"\""), + }, + { + arch: "arm", + version: "1.4.1", + url: "", + err: fmt.Errorf("unknown arch: \"arm\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "", + url: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "", + url: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.1.1", + url: "", + err: fmt.Errorf("unsupported legacy containerd version: \"1.1.1\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "1.1.1", + url: "", + err: fmt.Errorf("unsupported legacy containerd version: \"1.1.1\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.3.5", + url: "https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.3.5.linux-amd64.tar.gz", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.3.5", + url: "", + err: fmt.Errorf("unknown url for containerd version: arm64 - 1.3.5"), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.3.4", + url: "https://storage.googleapis.com/cri-containerd-release/cri-containerd-1.3.4.linux-amd64.tar.gz", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.3.4", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", + err: nil, + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.4.1", + url: "https://github.com/containerd/containerd/releases/download/v1.4.1/cri-containerd-cni-1.4.1-linux-amd64.tar.gz", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.4.1", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", + err: nil, + }, + } + for _, test := range tests { + t.Run(fmt.Sprintf("%s-%s", test.version, test.arch), func(t *testing.T) { + url, err := findContainerdVersionUrl(test.arch, test.version) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("actual error %q differs from expected error %q", err, test.err) + return + } + if url != test.url { + t.Errorf("actual url %q differs from expected url %q", url, test.url) + return + } + }) + } +} + +func TestContainerdVersionHash(t *testing.T) { + tests := []struct { + version string + arch architectures.Architecture + hash string + err error + }{ + { + arch: "", + version: "1.4.1", + hash: "", + err: fmt.Errorf("unknown arch: \"\""), + }, + { + arch: "arm", + version: "1.4.1", + hash: "", + err: fmt.Errorf("unknown arch: \"arm\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "", + hash: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "", + hash: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.1.1", + hash: "", + err: fmt.Errorf("unsupported legacy containerd version: \"1.1.1\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "1.1.1", + hash: "", + err: fmt.Errorf("unsupported legacy containerd version: \"1.1.1\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.3.5", + hash: "", + err: fmt.Errorf("unknown hash for containerd version: amd64 - 1.3.5"), + }, + { + arch: architectures.ArchitectureArm64, + version: "1.3.5", + hash: "", + err: fmt.Errorf("unknown hash for containerd version: arm64 - 1.3.5"), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.4.1", + hash: "757efb93a4f3161efc447a943317503d8a7ded5cb4cc0cba3f3318d7ce1542ed", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "1.4.1", + hash: "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + err: nil, + }, + } + for _, test := range tests { + t.Run(fmt.Sprintf("%s-%s", test.version, test.arch), func(t *testing.T) { + hash, err := findContainerdVersionHash(test.arch, test.version) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("actual error %q differs from expected error %q", err, test.err) + return + } + if hash != test.hash { + t.Errorf("actual hash %q differs from expected hash %q", hash, test.hash) + return + } + }) + } +} + +func TestContainerdVersionsHashesAmd64(t *testing.T) { + if os.Getenv("VERIFY_HASHES") == "" { + t.Skip("VERIFY_HASHES not set, won't download & verify docker hashes") + } + + for version, hash := range findAllContainerdHashesAmd64() { + t.Run(version+"-amd64", func(t *testing.T) { + url, _ := findContainerdVersionUrl(architectures.ArchitectureAmd64, version) + if err := verifyPackageHash(url, hash); err != nil { + t.Errorf("error verifying package %q: %v", url, err) + } + }) + } +} diff --git a/upup/pkg/fi/cloudup/docker_test.go b/upup/pkg/fi/cloudup/docker_test.go new file mode 100644 index 0000000000000..ef0d964dc7ea5 --- /dev/null +++ b/upup/pkg/fi/cloudup/docker_test.go @@ -0,0 +1,292 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cloudup + +import ( + "fmt" + "os" + "path" + "path/filepath" + "reflect" + "testing" + + "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/util/pkg/architectures" +) + +func TestDockerVersionUrlHash(t *testing.T) { + tests := []struct { + version string + arch architectures.Architecture + hash string + url string + err error + }{ + { + arch: architectures.ArchitectureAmd64, + version: "19.03.13", + url: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz", + hash: "ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "19.03.13", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz", + hash: "bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec", + err: nil, + }, + { + arch: architectures.ArchitectureAmd64, + version: "18.06.3", + url: "https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz", + hash: "346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "18.06.3", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz", + hash: "defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4", + err: nil, + }, + { + arch: architectures.ArchitectureAmd64, + version: "17.03.1", + url: "https://download.docker.com/linux/static/stable/x86_64/docker-17.03.1-ce.tgz", + hash: "3e070e7b34e99cf631f44d0ff5cf9a127c0b8af5c53dfc3e1fce4f9615fbf603", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "17.03.1", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-17.09.0-ce.tgz", + hash: "2af5d112ab514d9b0b84d9e7360a5e7633e88b7168d1bbfc16c6532535cb0123", + err: nil, + }, + } + for _, test := range tests { + t.Run(fmt.Sprintf("%s-%s", test.version, test.arch), func(t *testing.T) { + url, hash, err := findDockerVersionUrlHash(test.arch, test.version) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("actual error %q differs from expected error %q", err, test.err) + return + } + if url != test.url { + t.Errorf("actual url %q differs from expected url %q", url, test.url) + return + } + if hash != test.hash { + t.Errorf("actual hash %q differs from expected hash %q", hash, test.hash) + return + } + }) + } +} + +func TestDockerVersionUrl(t *testing.T) { + tests := []struct { + version string + arch architectures.Architecture + url string + err error + }{ + { + arch: "", + version: "19.03.13", + url: "", + err: fmt.Errorf("unknown arch: \"\""), + }, + { + arch: "arm", + version: "19.03.13", + url: "", + err: fmt.Errorf("unknown arch: \"arm\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "", + url: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "", + url: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "18.06.3", + url: "https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "18.06.3", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz", + err: nil, + }, + { + arch: architectures.ArchitectureAmd64, + version: "19.03.13", + url: "https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "19.03.13", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz", + err: nil, + }, + } + for _, test := range tests { + t.Run(fmt.Sprintf("%s-%s", test.version, test.arch), func(t *testing.T) { + url, err := findDockerVersionUrl(test.arch, test.version) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("actual error %q differs from expected error %q", err, test.err) + return + } + if url != test.url { + t.Errorf("actual url %q differs from expected url %q", url, test.url) + return + } + }) + } +} + +func TestDockerVersionHash(t *testing.T) { + tests := []struct { + version string + arch architectures.Architecture + hash string + err error + }{ + { + arch: "", + version: "19.03.13", + hash: "", + err: fmt.Errorf("unknown arch: \"\""), + }, + { + arch: "arm", + version: "19.03.13", + hash: "", + err: fmt.Errorf("unknown arch: \"arm\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "", + hash: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "", + hash: "", + err: fmt.Errorf("unable to parse version string: \"\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "1.1.1", + hash: "", + err: fmt.Errorf("unsupported legacy Docker version: \"1.1.1\""), + }, + { + arch: architectures.ArchitectureArm64, + version: "1.1.1", + hash: "", + err: fmt.Errorf("unsupported legacy Docker version: \"1.1.1\""), + }, + { + arch: architectures.ArchitectureAmd64, + version: "19.03.13", + hash: "ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8", + err: nil, + }, + { + arch: architectures.ArchitectureArm64, + version: "19.03.13", + hash: "bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec", + err: nil, + }, + } + for _, test := range tests { + t.Run(fmt.Sprintf("%s-%s", test.version, test.arch), func(t *testing.T) { + hash, err := findDockerVersionHash(test.arch, test.version) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("actual error %q differs from expected error %q", err, test.err) + return + } + if hash != test.hash { + t.Errorf("actual hash %q differs from expected hash %q", hash, test.hash) + return + } + }) + } +} + +func TestDockerVersionsHashesAmd64(t *testing.T) { + if os.Getenv("VERIFY_HASHES") == "" { + t.Skip("VERIFY_HASHES not set, won't download & verify docker hashes") + } + + for version, hash := range findAllDockerHashesAmd64() { + t.Run(version+"-amd64", func(t *testing.T) { + url, _ := findDockerVersionUrl(architectures.ArchitectureAmd64, version) + if err := verifyPackageHash(url, hash); err != nil { + t.Errorf("error verifying package %q: %v", url, err) + } + }) + } +} + +func TestDockerVersionsHashesArm64(t *testing.T) { + if os.Getenv("VERIFY_HASHES") == "" { + t.Skip("VERIFY_HASHES not set, won't download & verify docker hashes") + } + + for version, hash := range findAllDockerHashesArm64() { + t.Run(version+"-arm64", func(t *testing.T) { + url, _ := findDockerVersionUrl(architectures.ArchitectureArm64, version) + if err := verifyPackageHash(url, hash); err != nil { + t.Errorf("error verifying package %q: %v", url, err) + } + }) + } +} + +func verifyPackageHash(u string, h string) error { + name := fmt.Sprintf("%s-%s", h, path.Base(u)) + path := filepath.Join("/tmp", name) + + actualHash, err := fi.DownloadURL(u, path, nil) + if err != nil { + return err + } + + err = os.Remove(path) + if err != nil { + return err + } + + if h != actualHash.Hex() { + return fmt.Errorf("actual hash %q differs from expected hash %q", actualHash.Hex(), h) + } + + return nil +} From e44037f825b65b935ad1c946e0ca28e717667502 Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Wed, 14 Oct 2020 08:34:09 +0300 Subject: [PATCH 4/5] Install container runtime packages as assets - Integration --- ...-test-1a.masters.bastionuserdata.example.com_user_data | 2 ++ ...h_template_nodes.bastionuserdata.example.com_user_data | 2 ++ .../complex/cloudformation.json.extracted.yaml | 4 ++++ ...aster-us-test-1a.masters.complex.example.com_user_data | 2 ++ ...ws_launch_template_nodes.complex.example.com_user_data | 2 ++ .../cloudformation.json.extracted.yaml | 4 ++++ ...-us-test-1a.masters.existing-iam.example.com_user_data | 2 ++ ...-us-test-1b.masters.existing-iam.example.com_user_data | 2 ++ ...-us-test-1c.masters.existing-iam.example.com_user_data | 2 ++ ...unch_template_nodes.existing-iam.example.com_user_data | 2 ++ .../cloudformation.json.extracted.yaml | 4 ++++ ...er-us-test-1a.masters.existingsg.example.com_user_data | 2 ++ ...er-us-test-1b.masters.existingsg.example.com_user_data | 2 ++ ...er-us-test-1c.masters.existingsg.example.com_user_data | 2 ++ ...launch_template_nodes.existingsg.example.com_user_data | 2 ++ .../externallb/cloudformation.json.extracted.yaml | 4 ++++ ...er-us-test-1a.masters.externallb.example.com_user_data | 2 ++ ...launch_template_nodes.externallb.example.com_user_data | 2 ++ ...test-1a.masters.externalpolicies.example.com_user_data | 2 ++ ..._template_nodes.externalpolicies.example.com_user_data | 2 ++ ...ate_master-us-test-1a.masters.ha.example.com_user_data | 2 ++ ...ate_master-us-test-1b.masters.ha.example.com_user_data | 2 ++ ...ate_master-us-test-1c.masters.ha.example.com_user_data | 2 ++ .../aws_launch_template_nodes.ha.example.com_user_data | 2 ++ ...-us-test1-a-ha-gce-example-com_metadata_startup-script | 2 ++ ...-us-test1-b-ha-gce-example-com_metadata_startup-script | 2 ++ ...-us-test1-c-ha-gce-example-com_metadata_startup-script | 2 ++ ...plate_nodes-ha-gce-example-com_metadata_startup-script | 2 ++ .../launch_templates/cloudformation.json.extracted.yaml | 8 ++++++++ ...-test-1a.masters.launchtemplates.example.com_user_data | 2 ++ ...-test-1b.masters.launchtemplates.example.com_user_data | 2 ++ ...-test-1c.masters.launchtemplates.example.com_user_data | 2 ++ ...figuration_nodes.launchtemplates.example.com_user_data | 2 ++ .../cloudformation.json.extracted.yaml | 4 ++++ ...-us-test-1a.masters.minimal-json.example.com_user_data | 2 +- ...unch_template_nodes.minimal-json.example.com_user_data | 2 +- ...-us-test-1a.masters.minimal-tf11.example.com_user_data | 2 +- ...unch_template_nodes.minimal-tf11.example.com_user_data | 2 +- ...aster-us-test-1a.masters.minimal.example.com_user_data | 2 ++ ...ws_launch_template_nodes.minimal.example.com_user_data | 2 ++ ...est1-a-minimal-gce-example-com_metadata_startup-script | 2 ++ ..._nodes-minimal-gce-example-com_metadata_startup-script | 2 ++ .../mixed_instances/cloudformation.json.extracted.yaml | 8 ++++++++ ...s-test-1a.masters.mixedinstances.example.com_user_data | 2 ++ ...s-test-1b.masters.mixedinstances.example.com_user_data | 2 ++ ...s-test-1c.masters.mixedinstances.example.com_user_data | 2 ++ ...ch_template_nodes.mixedinstances.example.com_user_data | 2 ++ .../cloudformation.json.extracted.yaml | 8 ++++++++ ...s-test-1a.masters.mixedinstances.example.com_user_data | 2 ++ ...s-test-1b.masters.mixedinstances.example.com_user_data | 2 ++ ...s-test-1c.masters.mixedinstances.example.com_user_data | 2 ++ ...ch_template_nodes.mixedinstances.example.com_user_data | 2 ++ ...1a.masters.private-shared-subnet.example.com_user_data | 2 ++ ...late_nodes.private-shared-subnet.example.com_user_data | 2 ++ .../privatecalico/cloudformation.json.extracted.yaml | 6 ++++-- ...us-test-1a.masters.privatecalico.example.com_user_data | 3 ++- ...nch_template_nodes.privatecalico.example.com_user_data | 3 ++- ...-us-test-1a.masters.privatecanal.example.com_user_data | 2 ++ ...unch_template_nodes.privatecanal.example.com_user_data | 2 ++ .../privatecilium/cloudformation.json.extracted.yaml | 4 ++++ ...us-test-1a.masters.privatecilium.example.com_user_data | 2 ++ ...nch_template_nodes.privatecilium.example.com_user_data | 2 ++ .../privatecilium2/cloudformation.json.extracted.yaml | 4 ++++ ...us-test-1a.masters.privatecilium.example.com_user_data | 2 ++ ...nch_template_nodes.privatecilium.example.com_user_data | 2 ++ .../cloudformation.json.extracted.yaml | 4 ++++ ...1a.masters.privateciliumadvanced.example.com_user_data | 2 ++ ...late_nodes.privateciliumadvanced.example.com_user_data | 2 ++ ...r-us-test-1a.masters.privatedns1.example.com_user_data | 2 ++ ...aunch_template_nodes.privatedns1.example.com_user_data | 2 ++ ...r-us-test-1a.masters.privatedns2.example.com_user_data | 2 ++ ...aunch_template_nodes.privatedns2.example.com_user_data | 2 ++ ...s-test-1a.masters.privateflannel.example.com_user_data | 2 ++ ...ch_template_nodes.privateflannel.example.com_user_data | 2 ++ ...us-test-1a.masters.privatekopeio.example.com_user_data | 2 ++ ...nch_template_nodes.privatekopeio.example.com_user_data | 2 ++ ...-us-test-1a.masters.privateweave.example.com_user_data | 2 ++ ...unch_template_nodes.privateweave.example.com_user_data | 2 ++ ...aster-us-test-1a.masters.minimal.example.com_user_data | 2 ++ ...ws_launch_template_nodes.minimal.example.com_user_data | 2 ++ ...-us-test-1a.masters.sharedsubnet.example.com_user_data | 2 ++ ...unch_template_nodes.sharedsubnet.example.com_user_data | 2 ++ ...ter-us-test-1a.masters.sharedvpc.example.com_user_data | 2 ++ ..._launch_template_nodes.sharedvpc.example.com_user_data | 2 ++ ...ter-us-test-1a.masters.unmanaged.example.com_user_data | 2 ++ ..._launch_template_nodes.unmanaged.example.com_user_data | 2 ++ 86 files changed, 204 insertions(+), 8 deletions(-) diff --git a/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_master-us-test-1a.masters.bastionuserdata.example.com_user_data b/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_master-us-test-1a.masters.bastionuserdata.example.com_user_data index 6e43f9f0d246e..3f082b06c2d54 100644 --- a/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_master-us-test-1a.masters.bastionuserdata.example.com_user_data +++ b/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_master-us-test-1a.masters.bastionuserdata.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: bastionuserdata.example.com ConfigBase: memfs://clusters.example.com/bastionuserdata.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_nodes.bastionuserdata.example.com_user_data b/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_nodes.bastionuserdata.example.com_user_data index 8723855bedb06..40683979c8a06 100644 --- a/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_nodes.bastionuserdata.example.com_user_data +++ b/tests/integration/update_cluster/bastionadditional_user-data/data/aws_launch_template_nodes.bastionuserdata.example.com_user_data @@ -207,10 +207,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: bastionuserdata.example.com ConfigBase: memfs://clusters.example.com/bastionuserdata.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/complex/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/complex/cloudformation.json.extracted.yaml index 852590a5e3f08..6425cdbb294b1 100644 --- a/tests/integration/update_cluster/complex/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/complex/cloudformation.json.extracted.yaml @@ -294,10 +294,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amasterscomplexexamplecom.Properties. - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: complex.example.com ConfigBase: memfs://clusters.example.com/complex.example.com InstanceGroupName: master-us-test-1a @@ -571,10 +573,12 @@ Resources.AWSEC2LaunchTemplatenodescomplexexamplecom.Properties.LaunchTemplateDa - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: complex.example.com ConfigBase: memfs://clusters.example.com/complex.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/complex/data/aws_launch_template_master-us-test-1a.masters.complex.example.com_user_data b/tests/integration/update_cluster/complex/data/aws_launch_template_master-us-test-1a.masters.complex.example.com_user_data index a045449ea0263..738fcefc43a40 100644 --- a/tests/integration/update_cluster/complex/data/aws_launch_template_master-us-test-1a.masters.complex.example.com_user_data +++ b/tests/integration/update_cluster/complex/data/aws_launch_template_master-us-test-1a.masters.complex.example.com_user_data @@ -293,10 +293,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: complex.example.com ConfigBase: memfs://clusters.example.com/complex.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/complex/data/aws_launch_template_nodes.complex.example.com_user_data b/tests/integration/update_cluster/complex/data/aws_launch_template_nodes.complex.example.com_user_data index 38c6af7101402..3e7c5e4496822 100644 --- a/tests/integration/update_cluster/complex/data/aws_launch_template_nodes.complex.example.com_user_data +++ b/tests/integration/update_cluster/complex/data/aws_launch_template_nodes.complex.example.com_user_data @@ -208,10 +208,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: complex.example.com ConfigBase: memfs://clusters.example.com/complex.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/containerd-cloudformation/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/containerd-cloudformation/cloudformation.json.extracted.yaml index 86411ec18f751..ec63581959f8c 100644 --- a/tests/integration/update_cluster/containerd-cloudformation/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/containerd-cloudformation/cloudformation.json.extracted.yaml @@ -276,10 +276,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amasterscontainerdexamplecom.Properti - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 50cdf38749642ec43d6ac50f4a3f1f7f6ac688e8d8b4e1c5b7be06e1a82f06e9@https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - 0deddac5ae6f18ff0e6ce6a143c2cfd99c56dfb58be507770d840240fc9c51a9@https://download.docker.com/linux/static/stable/aarch64/docker-19.03.5.tgz ClusterName: containerd.example.com ConfigBase: memfs://clusters.example.com/containerd.example.com InstanceGroupName: master-us-test-1a @@ -526,10 +528,12 @@ Resources.AWSEC2LaunchTemplatenodescontainerdexamplecom.Properties.LaunchTemplat - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 50cdf38749642ec43d6ac50f4a3f1f7f6ac688e8d8b4e1c5b7be06e1a82f06e9@https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - 0deddac5ae6f18ff0e6ce6a143c2cfd99c56dfb58be507770d840240fc9c51a9@https://download.docker.com/linux/static/stable/aarch64/docker-19.03.5.tgz ClusterName: containerd.example.com ConfigBase: memfs://clusters.example.com/containerd.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1a.masters.existing-iam.example.com_user_data b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1a.masters.existing-iam.example.com_user_data index 6df30446c6d85..04ee8272d30b1 100644 --- a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1a.masters.existing-iam.example.com_user_data +++ b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1a.masters.existing-iam.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existing-iam.example.com ConfigBase: memfs://tests/existing-iam.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1b.masters.existing-iam.example.com_user_data b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1b.masters.existing-iam.example.com_user_data index 6bc070ab52532..9318687868854 100644 --- a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1b.masters.existing-iam.example.com_user_data +++ b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1b.masters.existing-iam.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existing-iam.example.com ConfigBase: memfs://tests/existing-iam.example.com InstanceGroupName: master-us-test-1b diff --git a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1c.masters.existing-iam.example.com_user_data b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1c.masters.existing-iam.example.com_user_data index 23a7dcfdb07f0..bae8d367476af 100644 --- a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1c.masters.existing-iam.example.com_user_data +++ b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_master-us-test-1c.masters.existing-iam.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existing-iam.example.com ConfigBase: memfs://tests/existing-iam.example.com InstanceGroupName: master-us-test-1c diff --git a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_nodes.existing-iam.example.com_user_data b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_nodes.existing-iam.example.com_user_data index 87862b8ee02ac..4798f60c541d2 100644 --- a/tests/integration/update_cluster/existing_iam/data/aws_launch_template_nodes.existing-iam.example.com_user_data +++ b/tests/integration/update_cluster/existing_iam/data/aws_launch_template_nodes.existing-iam.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existing-iam.example.com ConfigBase: memfs://tests/existing-iam.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml index 18f57b00899fa..b341243c545fd 100644 --- a/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/existing_iam_cloudformation/cloudformation.json.extracted.yaml @@ -283,10 +283,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersminimalexamplecom.Properties. - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: master-us-test-1a @@ -540,10 +542,12 @@ Resources.AWSEC2LaunchTemplatenodesminimalexamplecom.Properties.LaunchTemplateDa - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1a.masters.existingsg.example.com_user_data b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1a.masters.existingsg.example.com_user_data index 0ccfab924960a..9b6cfbf805c79 100644 --- a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1a.masters.existingsg.example.com_user_data +++ b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1a.masters.existingsg.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existingsg.example.com ConfigBase: memfs://clusters.example.com/existingsg.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1b.masters.existingsg.example.com_user_data b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1b.masters.existingsg.example.com_user_data index 1bf3e1c61b284..bbde7f73b3d03 100644 --- a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1b.masters.existingsg.example.com_user_data +++ b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1b.masters.existingsg.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existingsg.example.com ConfigBase: memfs://clusters.example.com/existingsg.example.com InstanceGroupName: master-us-test-1b diff --git a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1c.masters.existingsg.example.com_user_data b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1c.masters.existingsg.example.com_user_data index 6f14635a22247..74facf09fa51d 100644 --- a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1c.masters.existingsg.example.com_user_data +++ b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_master-us-test-1c.masters.existingsg.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existingsg.example.com ConfigBase: memfs://clusters.example.com/existingsg.example.com InstanceGroupName: master-us-test-1c diff --git a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_nodes.existingsg.example.com_user_data b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_nodes.existingsg.example.com_user_data index c9e98b09a1323..f459973140af3 100644 --- a/tests/integration/update_cluster/existing_sg/data/aws_launch_template_nodes.existingsg.example.com_user_data +++ b/tests/integration/update_cluster/existing_sg/data/aws_launch_template_nodes.existingsg.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: existingsg.example.com ConfigBase: memfs://clusters.example.com/existingsg.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml index 39edf79f2e8bd..aa1d6ca0280bc 100644 --- a/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/externallb/cloudformation.json.extracted.yaml @@ -283,10 +283,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersexternallbexamplecom.Properti - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: externallb.example.com ConfigBase: memfs://clusters.example.com/externallb.example.com InstanceGroupName: master-us-test-1a @@ -540,10 +542,12 @@ Resources.AWSEC2LaunchTemplatenodesexternallbexamplecom.Properties.LaunchTemplat - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: externallb.example.com ConfigBase: memfs://clusters.example.com/externallb.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/externallb/data/aws_launch_template_master-us-test-1a.masters.externallb.example.com_user_data b/tests/integration/update_cluster/externallb/data/aws_launch_template_master-us-test-1a.masters.externallb.example.com_user_data index 2a470c3e9fd22..94e616c5a0bbe 100644 --- a/tests/integration/update_cluster/externallb/data/aws_launch_template_master-us-test-1a.masters.externallb.example.com_user_data +++ b/tests/integration/update_cluster/externallb/data/aws_launch_template_master-us-test-1a.masters.externallb.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: externallb.example.com ConfigBase: memfs://clusters.example.com/externallb.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/externallb/data/aws_launch_template_nodes.externallb.example.com_user_data b/tests/integration/update_cluster/externallb/data/aws_launch_template_nodes.externallb.example.com_user_data index b0ec41820fc11..30ecbd7789055 100644 --- a/tests/integration/update_cluster/externallb/data/aws_launch_template_nodes.externallb.example.com_user_data +++ b/tests/integration/update_cluster/externallb/data/aws_launch_template_nodes.externallb.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: externallb.example.com ConfigBase: memfs://clusters.example.com/externallb.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_master-us-test-1a.masters.externalpolicies.example.com_user_data b/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_master-us-test-1a.masters.externalpolicies.example.com_user_data index c6dbe2d5ba5db..4e67e25a5dde9 100644 --- a/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_master-us-test-1a.masters.externalpolicies.example.com_user_data +++ b/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_master-us-test-1a.masters.externalpolicies.example.com_user_data @@ -284,10 +284,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: externalpolicies.example.com ConfigBase: memfs://clusters.example.com/externalpolicies.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_nodes.externalpolicies.example.com_user_data b/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_nodes.externalpolicies.example.com_user_data index 146a126405798..930e5f74e19bb 100644 --- a/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_nodes.externalpolicies.example.com_user_data +++ b/tests/integration/update_cluster/externalpolicies/data/aws_launch_template_nodes.externalpolicies.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: externalpolicies.example.com ConfigBase: memfs://clusters.example.com/externalpolicies.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1a.masters.ha.example.com_user_data b/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1a.masters.ha.example.com_user_data index 5ae78797fc5b4..d74cb5e011144 100644 --- a/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1a.masters.ha.example.com_user_data +++ b/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1a.masters.ha.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha.example.com ConfigBase: memfs://tests/ha.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1b.masters.ha.example.com_user_data b/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1b.masters.ha.example.com_user_data index 625fdb8bf50bf..84a50211137fa 100644 --- a/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1b.masters.ha.example.com_user_data +++ b/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1b.masters.ha.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha.example.com ConfigBase: memfs://tests/ha.example.com InstanceGroupName: master-us-test-1b diff --git a/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1c.masters.ha.example.com_user_data b/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1c.masters.ha.example.com_user_data index ee8096e2cf5b6..4df8c3dbac479 100644 --- a/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1c.masters.ha.example.com_user_data +++ b/tests/integration/update_cluster/ha/data/aws_launch_template_master-us-test-1c.masters.ha.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha.example.com ConfigBase: memfs://tests/ha.example.com InstanceGroupName: master-us-test-1c diff --git a/tests/integration/update_cluster/ha/data/aws_launch_template_nodes.ha.example.com_user_data b/tests/integration/update_cluster/ha/data/aws_launch_template_nodes.ha.example.com_user_data index 82240b312e373..0e8698e974a72 100644 --- a/tests/integration/update_cluster/ha/data/aws_launch_template_nodes.ha.example.com_user_data +++ b/tests/integration/update_cluster/ha/data/aws_launch_template_nodes.ha.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha.example.com ConfigBase: memfs://tests/ha.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_startup-script b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_startup-script index ef226df4688e6..b1c3cc037d972 100644 --- a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_startup-script +++ b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-a-ha-gce-example-com_metadata_startup-script @@ -286,11 +286,13 @@ Assets: - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - ae0d7b36c7f9559354ee35c14bf084a771132e32@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/mounter - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - df7fc4fe107253603d284a549cac36ae072a0dcb@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/mounter - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha-gce.example.com ConfigBase: memfs://tests/ha-gce.example.com InstanceGroupName: master-us-test1-a diff --git a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_startup-script b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_startup-script index 90736f34e0938..d2ce4285a083a 100644 --- a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_startup-script +++ b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-b-ha-gce-example-com_metadata_startup-script @@ -286,11 +286,13 @@ Assets: - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - ae0d7b36c7f9559354ee35c14bf084a771132e32@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/mounter - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - df7fc4fe107253603d284a549cac36ae072a0dcb@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/mounter - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha-gce.example.com ConfigBase: memfs://tests/ha-gce.example.com InstanceGroupName: master-us-test1-b diff --git a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_startup-script b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_startup-script index d5e6217e86c16..dfc15b70137a6 100644 --- a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_startup-script +++ b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_master-us-test1-c-ha-gce-example-com_metadata_startup-script @@ -286,11 +286,13 @@ Assets: - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - ae0d7b36c7f9559354ee35c14bf084a771132e32@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/mounter - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - df7fc4fe107253603d284a549cac36ae072a0dcb@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/mounter - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha-gce.example.com ConfigBase: memfs://tests/ha-gce.example.com InstanceGroupName: master-us-test1-c diff --git a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_startup-script b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_startup-script index 9fa50a68cba33..b252546dfb4df 100644 --- a/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_startup-script +++ b/tests/integration/update_cluster/ha_gce/data/google_compute_instance_template_nodes-ha-gce-example-com_metadata_startup-script @@ -202,11 +202,13 @@ Assets: - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - ae0d7b36c7f9559354ee35c14bf084a771132e32@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/mounter - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - df7fc4fe107253603d284a549cac36ae072a0dcb@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/mounter - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: ha-gce.example.com ConfigBase: memfs://tests/ha-gce.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/launch_templates/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/launch_templates/cloudformation.json.extracted.yaml index b491fc214b075..a50b5183ef054 100644 --- a/tests/integration/update_cluster/launch_templates/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/launch_templates/cloudformation.json.extracted.yaml @@ -285,10 +285,12 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1amasterslaunchtemplatese - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: master-us-test-1a @@ -628,10 +630,12 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1bmasterslaunchtemplatese - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: master-us-test-1b @@ -971,10 +975,12 @@ Resources.AWSAutoScalingLaunchConfigurationmasterustest1cmasterslaunchtemplatese - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: master-us-test-1c @@ -1230,10 +1236,12 @@ Resources.AWSAutoScalingLaunchConfigurationnodeslaunchtemplatesexamplecom.Proper - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1a.masters.launchtemplates.example.com_user_data b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1a.masters.launchtemplates.example.com_user_data index c76ad0e2756f4..624d435c45c11 100644 --- a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1a.masters.launchtemplates.example.com_user_data +++ b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1a.masters.launchtemplates.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1b.masters.launchtemplates.example.com_user_data b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1b.masters.launchtemplates.example.com_user_data index 49d3f427f24c9..0776d80b83b4f 100644 --- a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1b.masters.launchtemplates.example.com_user_data +++ b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1b.masters.launchtemplates.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: master-us-test-1b diff --git a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1c.masters.launchtemplates.example.com_user_data b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1c.masters.launchtemplates.example.com_user_data index e8fd4ec771137..78e3bd1cb8066 100644 --- a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1c.masters.launchtemplates.example.com_user_data +++ b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_master-us-test-1c.masters.launchtemplates.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: master-us-test-1c diff --git a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_nodes.launchtemplates.example.com_user_data b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_nodes.launchtemplates.example.com_user_data index 52cc96b631676..efe96d07062ec 100644 --- a/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_nodes.launchtemplates.example.com_user_data +++ b/tests/integration/update_cluster/launch_templates/data/aws_launch_configuration_nodes.launchtemplates.example.com_user_data @@ -200,10 +200,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: launchtemplates.example.com ConfigBase: memfs://clusters.example.com/launchtemplates.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml index 18f57b00899fa..b341243c545fd 100644 --- a/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/minimal-cloudformation/cloudformation.json.extracted.yaml @@ -283,10 +283,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersminimalexamplecom.Properties. - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: master-us-test-1a @@ -540,10 +542,12 @@ Resources.AWSEC2LaunchTemplatenodesminimalexamplecom.Properties.LaunchTemplateDa - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/minimal-json/data/aws_launch_template_master-us-test-1a.masters.minimal-json.example.com_user_data b/tests/integration/update_cluster/minimal-json/data/aws_launch_template_master-us-test-1a.masters.minimal-json.example.com_user_data index 023052b979cc3..15636279cbc5b 100644 --- a/tests/integration/update_cluster/minimal-json/data/aws_launch_template_master-us-test-1a.masters.minimal-json.example.com_user_data +++ b/tests/integration/update_cluster/minimal-json/data/aws_launch_template_master-us-test-1a.masters.minimal-json.example.com_user_data @@ -1 +1 @@ -IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKZW5jcnlwdGlvbkNvbmZpZzogbnVsbApldGNkQ2x1c3RlcnM6CiAgZXZlbnRzOgogICAgdmVyc2lvbjogMy4zLjEwCiAgbWFpbjoKICAgIHZlcnNpb246IDMuMy4xMAprdWJlQVBJU2VydmVyOgogIGFsbG93UHJpdmlsZWdlZDogdHJ1ZQogIGFub255bW91c0F1dGg6IGZhbHNlCiAgYXBpU2VydmVyQ291bnQ6IDEKICBhdXRob3JpemF0aW9uTW9kZTogQWx3YXlzQWxsb3cKICBiaW5kQWRkcmVzczogMC4wLjAuMAogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGVuYWJsZUFkbWlzc2lvblBsdWdpbnM6CiAgLSBOYW1lc3BhY2VMaWZlY3ljbGUKICAtIExpbWl0UmFuZ2VyCiAgLSBTZXJ2aWNlQWNjb3VudAogIC0gUGVyc2lzdGVudFZvbHVtZUxhYmVsCiAgLSBEZWZhdWx0U3RvcmFnZUNsYXNzCiAgLSBEZWZhdWx0VG9sZXJhdGlvblNlY29uZHMKICAtIE11dGF0aW5nQWRtaXNzaW9uV2ViaG9vawogIC0gVmFsaWRhdGluZ0FkbWlzc2lvbldlYmhvb2sKICAtIE5vZGVSZXN0cmljdGlvbgogIC0gUmVzb3VyY2VRdW90YQogIGV0Y2RTZXJ2ZXJzOgogIC0gaHR0cDovLzEyNy4wLjAuMTo0MDAxCiAgZXRjZFNlcnZlcnNPdmVycmlkZXM6CiAgLSAvZXZlbnRzI2h0dHA6Ly8xMjcuMC4wLjE6NDAwMgogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtYXBpc2VydmVyOnYxLjE0LjAKICBpbnNlY3VyZUJpbmRBZGRyZXNzOiAxMjcuMC4wLjEKICBpbnNlY3VyZVBvcnQ6IDgwODAKICBrdWJlbGV0UHJlZmVycmVkQWRkcmVzc1R5cGVzOgogIC0gSW50ZXJuYWxJUAogIC0gSG9zdG5hbWUKICAtIEV4dGVybmFsSVAKICBsb2dMZXZlbDogMgogIHJlcXVlc3RoZWFkZXJBbGxvd2VkTmFtZXM6CiAgLSBhZ2dyZWdhdG9yCiAgcmVxdWVzdGhlYWRlckV4dHJhSGVhZGVyUHJlZml4ZXM6CiAgLSBYLVJlbW90ZS1FeHRyYS0KICByZXF1ZXN0aGVhZGVyR3JvdXBIZWFkZXJzOgogIC0gWC1SZW1vdGUtR3JvdXAKICByZXF1ZXN0aGVhZGVyVXNlcm5hbWVIZWFkZXJzOgogIC0gWC1SZW1vdGUtVXNlcgogIHNlY3VyZVBvcnQ6IDQ0MwogIHNlcnZpY2VDbHVzdGVySVBSYW5nZTogMTAwLjY0LjAuMC8xMwogIHN0b3JhZ2VCYWNrZW5kOiBldGNkMwprdWJlQ29udHJvbGxlck1hbmFnZXI6CiAgYWxsb2NhdGVOb2RlQ0lEUnM6IHRydWUKICBhdHRhY2hEZXRhY2hSZWNvbmNpbGVTeW5jUGVyaW9kOiAxbTBzCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjbHVzdGVyTmFtZTogbWluaW1hbC1qc29uLmV4YW1wbGUuY29tCiAgY29uZmlndXJlQ2xvdWRSb3V0ZXM6IHRydWUKICBpbWFnZTogazhzLmdjci5pby9rdWJlLWNvbnRyb2xsZXItbWFuYWdlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCiAgdXNlU2VydmljZUFjY291bnRDcmVkZW50aWFsczogdHJ1ZQprdWJlUHJveHk6CiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjcHVSZXF1ZXN0OiAxMDBtCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAgaW1hZ2U6IGs4cy5nY3IuaW8va3ViZS1wcm94eTp2MS4xNC4wCiAgbG9nTGV2ZWw6IDIKa3ViZVNjaGVkdWxlcjoKICBpbWFnZTogazhzLmdjci5pby9rdWJlLXNjaGVkdWxlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwptYXN0ZXJLdWJlbGV0OgogIGFub255bW91c0F1dGg6IGZhbHNlCiAgY2dyb3VwUm9vdDogLwogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGNsdXN0ZXJETlM6IDEwMC42NC4wLjEwCiAgY2x1c3RlckRvbWFpbjogY2x1c3Rlci5sb2NhbAogIGVuYWJsZURlYnVnZ2luZ0hhbmRsZXJzOiB0cnVlCiAgZXZpY3Rpb25IYXJkOiBtZW1vcnkuYXZhaWxhYmxlPDEwME1pLG5vZGVmcy5hdmFpbGFibGU8MTAlLG5vZGVmcy5pbm9kZXNGcmVlPDUlLGltYWdlZnMuYXZhaWxhYmxlPDEwJSxpbWFnZWZzLmlub2Rlc0ZyZWU8NSUKICBmZWF0dXJlR2F0ZXM6CiAgICBFeHBlcmltZW50YWxDcml0aWNhbFBvZEFubm90YXRpb246ICJ0cnVlIgogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGt1YmVjb25maWdQYXRoOiAvdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcKICBsb2dMZXZlbDogMgogIG5ldHdvcmtQbHVnaW5NVFU6IDkwMDEKICBuZXR3b3JrUGx1Z2luTmFtZToga3ViZW5ldAogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICByZWdpc3RlclNjaGVkdWxhYmxlOiBmYWxzZQoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIGFybTY0OgogIC0gZGYzOGUwNDU3NjAyNjM5MzA1NWNjYzc3YzBkY2U3MzYxMjk5NjU2MUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWxldAogIC0gMDFjMmI2YjQzZDM2YjZiZmFmYzgwYTM3MzczOTFjMTllYmZiOGFkNUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWN0bAogIC0gN2ZlYzkxYWY3OGU5NTQ4ZGYzMDZmMGVjNDNiZWE1MjdjOGMxMGNjM2E5NjgyYzMzZTk3MWM4NTIyYTdmY2RlZEBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL25ldHdvcmstcGx1Z2lucy9jbmktcGx1Z2lucy1hcm02NC12MC43LjUudGd6CkNsdXN0ZXJOYW1lOiBtaW5pbWFsLWpzb24uZXhhbXBsZS5jb20KQ29uZmlnQmFzZTogbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLWpzb24uZXhhbXBsZS5jb20KSW5zdGFuY2VHcm91cE5hbWU6IG1hc3Rlci11cy10ZXN0LTFhCkluc3RhbmNlR3JvdXBSb2xlOiBNYXN0ZXIKS3ViZWxldENvbmZpZzoKICBhbm9ueW1vdXNBdXRoOiBmYWxzZQogIGNncm91cFJvb3Q6IC8KICBjbG91ZFByb3ZpZGVyOiBhd3MKICBjbHVzdGVyRE5TOiAxMDAuNjQuMC4xMAogIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICBlbmFibGVEZWJ1Z2dpbmdIYW5kbGVyczogdHJ1ZQogIGV2aWN0aW9uSGFyZDogbWVtb3J5LmF2YWlsYWJsZTwxMDBNaSxub2RlZnMuYXZhaWxhYmxlPDEwJSxub2RlZnMuaW5vZGVzRnJlZTw1JSxpbWFnZWZzLmF2YWlsYWJsZTwxMCUsaW1hZ2Vmcy5pbm9kZXNGcmVlPDUlCiAgZmVhdHVyZUdhdGVzOgogICAgRXhwZXJpbWVudGFsQ3JpdGljYWxQb2RBbm5vdGF0aW9uOiAidHJ1ZSIKICBob3N0bmFtZU92ZXJyaWRlOiAnQGF3cycKICBrdWJlY29uZmlnUGF0aDogL3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnCiAgbG9nTGV2ZWw6IDIKICBuZXR3b3JrUGx1Z2luTVRVOiA5MDAxCiAgbmV0d29ya1BsdWdpbk5hbWU6IGt1YmVuZXQKICBub2RlTGFiZWxzOgogICAga3ViZXJuZXRlcy5pby9yb2xlOiBtYXN0ZXIKICAgIG5vZGUtcm9sZS5rdWJlcm5ldGVzLmlvL21hc3RlcjogIiIKICBub25NYXNxdWVyYWRlQ0lEUjogMTAwLjY0LjAuMC8xMAogIHBvZEluZnJhQ29udGFpbmVySW1hZ2U6IGs4cy5nY3IuaW8vcGF1c2U6My4yCiAgcG9kTWFuaWZlc3RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCiAgcmVnaXN0ZXJTY2hlZHVsYWJsZTogZmFsc2UKY2hhbm5lbHM6Ci0gbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLWpzb24uZXhhbXBsZS5jb20vYWRkb25zL2Jvb3RzdHJhcC1jaGFubmVsLnlhbWwKZXRjZE1hbmlmZXN0czoKLSBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtanNvbi5leGFtcGxlLmNvbS9tYW5pZmVzdHMvZXRjZC9tYWluLnlhbWwKLSBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtanNvbi5leGFtcGxlLmNvbS9tYW5pZmVzdHMvZXRjZC9ldmVudHMueWFtbApwcm90b2t1YmVJbWFnZToKICBhbWQ2NDoKICAgIGhhc2g6IDdiM2M3ZjZhZGJkYTExYjFlYzc0MGJkNmI5NjljODRmMjQ5YjdlZWU4MThhZjk1ZjJkMzIxOTYzMDg4MjQ1YTgKICAgIG5hbWU6IHByb3Rva3ViZToxLjE5LjAtYWxwaGEuMwogICAgc291cmNlczoKICAgIC0gaHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hbWQ2NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMva29wcy9yZWxlYXNlcy9kb3dubG9hZC92MS4xOS4wLWFscGhhLjMvaW1hZ2VzLXByb3Rva3ViZS1hbWQ2NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hbWQ2NC50YXIuZ3oKICBhcm02NDoKICAgIGhhc2g6IDY5MjcwY2E5YzFjOTUwYmU2NWFmNDAzMzdhZGZjY2VjMGE3Mjg5MzBmYTMyMjRiYjBkMmU4OGYxODFmMzllYWQKICAgIG5hbWU6IHByb3Rva3ViZToxLjE5LjAtYWxwaGEuMwogICAgc291cmNlczoKICAgIC0gaHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hcm02NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMva29wcy9yZWxlYXNlcy9kb3dubG9hZC92MS4xOS4wLWFscGhhLjMvaW1hZ2VzLXByb3Rva3ViZS1hcm02NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hcm02NC50YXIuZ3oKCl9fRU9GX0tVQkVfRU5WCgpkb3dubG9hZC1yZWxlYXNlCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBkb25lID09Igo= +IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKZW5jcnlwdGlvbkNvbmZpZzogbnVsbApldGNkQ2x1c3RlcnM6CiAgZXZlbnRzOgogICAgdmVyc2lvbjogMy4zLjEwCiAgbWFpbjoKICAgIHZlcnNpb246IDMuMy4xMAprdWJlQVBJU2VydmVyOgogIGFsbG93UHJpdmlsZWdlZDogdHJ1ZQogIGFub255bW91c0F1dGg6IGZhbHNlCiAgYXBpU2VydmVyQ291bnQ6IDEKICBhdXRob3JpemF0aW9uTW9kZTogQWx3YXlzQWxsb3cKICBiaW5kQWRkcmVzczogMC4wLjAuMAogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGVuYWJsZUFkbWlzc2lvblBsdWdpbnM6CiAgLSBOYW1lc3BhY2VMaWZlY3ljbGUKICAtIExpbWl0UmFuZ2VyCiAgLSBTZXJ2aWNlQWNjb3VudAogIC0gUGVyc2lzdGVudFZvbHVtZUxhYmVsCiAgLSBEZWZhdWx0U3RvcmFnZUNsYXNzCiAgLSBEZWZhdWx0VG9sZXJhdGlvblNlY29uZHMKICAtIE11dGF0aW5nQWRtaXNzaW9uV2ViaG9vawogIC0gVmFsaWRhdGluZ0FkbWlzc2lvbldlYmhvb2sKICAtIE5vZGVSZXN0cmljdGlvbgogIC0gUmVzb3VyY2VRdW90YQogIGV0Y2RTZXJ2ZXJzOgogIC0gaHR0cDovLzEyNy4wLjAuMTo0MDAxCiAgZXRjZFNlcnZlcnNPdmVycmlkZXM6CiAgLSAvZXZlbnRzI2h0dHA6Ly8xMjcuMC4wLjE6NDAwMgogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtYXBpc2VydmVyOnYxLjE0LjAKICBpbnNlY3VyZUJpbmRBZGRyZXNzOiAxMjcuMC4wLjEKICBpbnNlY3VyZVBvcnQ6IDgwODAKICBrdWJlbGV0UHJlZmVycmVkQWRkcmVzc1R5cGVzOgogIC0gSW50ZXJuYWxJUAogIC0gSG9zdG5hbWUKICAtIEV4dGVybmFsSVAKICBsb2dMZXZlbDogMgogIHJlcXVlc3RoZWFkZXJBbGxvd2VkTmFtZXM6CiAgLSBhZ2dyZWdhdG9yCiAgcmVxdWVzdGhlYWRlckV4dHJhSGVhZGVyUHJlZml4ZXM6CiAgLSBYLVJlbW90ZS1FeHRyYS0KICByZXF1ZXN0aGVhZGVyR3JvdXBIZWFkZXJzOgogIC0gWC1SZW1vdGUtR3JvdXAKICByZXF1ZXN0aGVhZGVyVXNlcm5hbWVIZWFkZXJzOgogIC0gWC1SZW1vdGUtVXNlcgogIHNlY3VyZVBvcnQ6IDQ0MwogIHNlcnZpY2VDbHVzdGVySVBSYW5nZTogMTAwLjY0LjAuMC8xMwogIHN0b3JhZ2VCYWNrZW5kOiBldGNkMwprdWJlQ29udHJvbGxlck1hbmFnZXI6CiAgYWxsb2NhdGVOb2RlQ0lEUnM6IHRydWUKICBhdHRhY2hEZXRhY2hSZWNvbmNpbGVTeW5jUGVyaW9kOiAxbTBzCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjbHVzdGVyTmFtZTogbWluaW1hbC1qc29uLmV4YW1wbGUuY29tCiAgY29uZmlndXJlQ2xvdWRSb3V0ZXM6IHRydWUKICBpbWFnZTogazhzLmdjci5pby9rdWJlLWNvbnRyb2xsZXItbWFuYWdlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCiAgdXNlU2VydmljZUFjY291bnRDcmVkZW50aWFsczogdHJ1ZQprdWJlUHJveHk6CiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjcHVSZXF1ZXN0OiAxMDBtCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAgaW1hZ2U6IGs4cy5nY3IuaW8va3ViZS1wcm94eTp2MS4xNC4wCiAgbG9nTGV2ZWw6IDIKa3ViZVNjaGVkdWxlcjoKICBpbWFnZTogazhzLmdjci5pby9rdWJlLXNjaGVkdWxlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwptYXN0ZXJLdWJlbGV0OgogIGFub255bW91c0F1dGg6IGZhbHNlCiAgY2dyb3VwUm9vdDogLwogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGNsdXN0ZXJETlM6IDEwMC42NC4wLjEwCiAgY2x1c3RlckRvbWFpbjogY2x1c3Rlci5sb2NhbAogIGVuYWJsZURlYnVnZ2luZ0hhbmRsZXJzOiB0cnVlCiAgZXZpY3Rpb25IYXJkOiBtZW1vcnkuYXZhaWxhYmxlPDEwME1pLG5vZGVmcy5hdmFpbGFibGU8MTAlLG5vZGVmcy5pbm9kZXNGcmVlPDUlLGltYWdlZnMuYXZhaWxhYmxlPDEwJSxpbWFnZWZzLmlub2Rlc0ZyZWU8NSUKICBmZWF0dXJlR2F0ZXM6CiAgICBFeHBlcmltZW50YWxDcml0aWNhbFBvZEFubm90YXRpb246ICJ0cnVlIgogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGt1YmVjb25maWdQYXRoOiAvdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcKICBsb2dMZXZlbDogMgogIG5ldHdvcmtQbHVnaW5NVFU6IDkwMDEKICBuZXR3b3JrUGx1Z2luTmFtZToga3ViZW5ldAogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICByZWdpc3RlclNjaGVkdWxhYmxlOiBmYWxzZQoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIC0gMzQ2ZjkzOTQzOTNlZThkYjVmOGJkMWUyMjllZTlkOTBlNWIzNjkzMWJkZDc1NDMwOGIyYWU2ODg4NGRkNjgyMkBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvc3RhdGljL3N0YWJsZS94ODZfNjQvZG9ja2VyLTE4LjA2LjMtY2UudGd6CiAgYXJtNjQ6CiAgLSBkZjM4ZTA0NTc2MDI2MzkzMDU1Y2NjNzdjMGRjZTczNjEyOTk2NTYxQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlbGV0CiAgLSAwMWMyYjZiNDNkMzZiNmJmYWZjODBhMzczNzM5MWMxOWViZmI4YWQ1QGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlY3RsCiAgLSA3ZmVjOTFhZjc4ZTk1NDhkZjMwNmYwZWM0M2JlYTUyN2M4YzEwY2MzYTk2ODJjMzNlOTcxYzg1MjJhN2ZjZGVkQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvbmV0d29yay1wbHVnaW5zL2NuaS1wbHVnaW5zLWFybTY0LXYwLjcuNS50Z3oKICAtIGRlZmIyY2NjOTVjMDgyNTgzMzIxNmM4YjllMGUxNWJhYWE1MWJjZWRiM2VmYzFmMzkzZjUzNTJkMTg0ZGVhZDRAaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3N0YXRpYy9zdGFibGUvYWFyY2g2NC9kb2NrZXItMTguMDYuMy1jZS50Z3oKQ2x1c3Rlck5hbWU6IG1pbmltYWwtanNvbi5leGFtcGxlLmNvbQpDb25maWdCYXNlOiBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtanNvbi5leGFtcGxlLmNvbQpJbnN0YW5jZUdyb3VwTmFtZTogbWFzdGVyLXVzLXRlc3QtMWEKSW5zdGFuY2VHcm91cFJvbGU6IE1hc3RlcgpLdWJlbGV0Q29uZmlnOgogIGFub255bW91c0F1dGg6IGZhbHNlCiAgY2dyb3VwUm9vdDogLwogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGNsdXN0ZXJETlM6IDEwMC42NC4wLjEwCiAgY2x1c3RlckRvbWFpbjogY2x1c3Rlci5sb2NhbAogIGVuYWJsZURlYnVnZ2luZ0hhbmRsZXJzOiB0cnVlCiAgZXZpY3Rpb25IYXJkOiBtZW1vcnkuYXZhaWxhYmxlPDEwME1pLG5vZGVmcy5hdmFpbGFibGU8MTAlLG5vZGVmcy5pbm9kZXNGcmVlPDUlLGltYWdlZnMuYXZhaWxhYmxlPDEwJSxpbWFnZWZzLmlub2Rlc0ZyZWU8NSUKICBmZWF0dXJlR2F0ZXM6CiAgICBFeHBlcmltZW50YWxDcml0aWNhbFBvZEFubm90YXRpb246ICJ0cnVlIgogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGt1YmVjb25maWdQYXRoOiAvdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcKICBsb2dMZXZlbDogMgogIG5ldHdvcmtQbHVnaW5NVFU6IDkwMDEKICBuZXR3b3JrUGx1Z2luTmFtZToga3ViZW5ldAogIG5vZGVMYWJlbHM6CiAgICBrdWJlcm5ldGVzLmlvL3JvbGU6IG1hc3RlcgogICAgbm9kZS1yb2xlLmt1YmVybmV0ZXMuaW8vbWFzdGVyOiAiIgogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICByZWdpc3RlclNjaGVkdWxhYmxlOiBmYWxzZQpjaGFubmVsczoKLSBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtanNvbi5leGFtcGxlLmNvbS9hZGRvbnMvYm9vdHN0cmFwLWNoYW5uZWwueWFtbApldGNkTWFuaWZlc3RzOgotIG1lbWZzOi8vY2x1c3RlcnMuZXhhbXBsZS5jb20vbWluaW1hbC1qc29uLmV4YW1wbGUuY29tL21hbmlmZXN0cy9ldGNkL21haW4ueWFtbAotIG1lbWZzOi8vY2x1c3RlcnMuZXhhbXBsZS5jb20vbWluaW1hbC1qc29uLmV4YW1wbGUuY29tL21hbmlmZXN0cy9ldGNkL2V2ZW50cy55YW1sCnByb3Rva3ViZUltYWdlOgogIGFtZDY0OgogICAgaGFzaDogN2IzYzdmNmFkYmRhMTFiMWVjNzQwYmQ2Yjk2OWM4NGYyNDliN2VlZTgxOGFmOTVmMmQzMjE5NjMwODgyNDVhOAogICAgbmFtZTogcHJvdG9rdWJlOjEuMTkuMC1hbHBoYS4zCiAgICBzb3VyY2VzOgogICAgLSBodHRwczovL2FydGlmYWN0cy5rOHMuaW8vYmluYXJpZXMva29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFtZDY0LnRhci5negogICAgLSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9pbWFnZXMtcHJvdG9rdWJlLWFtZDY0LnRhci5negogICAgLSBodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFtZDY0LnRhci5negogIGFybTY0OgogICAgaGFzaDogNjkyNzBjYTljMWM5NTBiZTY1YWY0MDMzN2FkZmNjZWMwYTcyODkzMGZhMzIyNGJiMGQyZTg4ZjE4MWYzOWVhZAogICAgbmFtZTogcHJvdG9rdWJlOjEuMTkuMC1hbHBoYS4zCiAgICBzb3VyY2VzOgogICAgLSBodHRwczovL2FydGlmYWN0cy5rOHMuaW8vYmluYXJpZXMva29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFybTY0LnRhci5negogICAgLSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9pbWFnZXMtcHJvdG9rdWJlLWFybTY0LnRhci5negogICAgLSBodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFybTY0LnRhci5negoKX19FT0ZfS1VCRV9FTlYKCmRvd25sb2FkLXJlbGVhc2UKZWNobyAiPT0gbm9kZXVwIG5vZGUgY29uZmlnIGRvbmUgPT0iCg== diff --git a/tests/integration/update_cluster/minimal-json/data/aws_launch_template_nodes.minimal-json.example.com_user_data b/tests/integration/update_cluster/minimal-json/data/aws_launch_template_nodes.minimal-json.example.com_user_data index be15b5973bf97..7a0a684ec5803 100644 --- a/tests/integration/update_cluster/minimal-json/data/aws_launch_template_nodes.minimal-json.example.com_user_data +++ b/tests/integration/update_cluster/minimal-json/data/aws_launch_template_nodes.minimal-json.example.com_user_data @@ -1 +1 @@ -IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKa3ViZVByb3h5OgogIGNsdXN0ZXJDSURSOiAxMDAuOTYuMC4wLzExCiAgY3B1UmVxdWVzdDogMTAwbQogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtcHJveHk6djEuMTQuMAogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIGFybTY0OgogIC0gZGYzOGUwNDU3NjAyNjM5MzA1NWNjYzc3YzBkY2U3MzYxMjk5NjU2MUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWxldAogIC0gMDFjMmI2YjQzZDM2YjZiZmFmYzgwYTM3MzczOTFjMTllYmZiOGFkNUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWN0bAogIC0gN2ZlYzkxYWY3OGU5NTQ4ZGYzMDZmMGVjNDNiZWE1MjdjOGMxMGNjM2E5NjgyYzMzZTk3MWM4NTIyYTdmY2RlZEBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL25ldHdvcmstcGx1Z2lucy9jbmktcGx1Z2lucy1hcm02NC12MC43LjUudGd6CkNsdXN0ZXJOYW1lOiBtaW5pbWFsLWpzb24uZXhhbXBsZS5jb20KQ29uZmlnQmFzZTogbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLWpzb24uZXhhbXBsZS5jb20KSW5zdGFuY2VHcm91cE5hbWU6IG5vZGVzCkluc3RhbmNlR3JvdXBSb2xlOiBOb2RlCkt1YmVsZXRDb25maWc6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9kZUxhYmVsczoKICAgIGt1YmVybmV0ZXMuaW8vcm9sZTogbm9kZQogICAgbm9kZS1yb2xlLmt1YmVybmV0ZXMuaW8vbm9kZTogIiIKICBub25NYXNxdWVyYWRlQ0lEUjogMTAwLjY0LjAuMC8xMAogIHBvZEluZnJhQ29udGFpbmVySW1hZ2U6IGs4cy5nY3IuaW8vcGF1c2U6My4yCiAgcG9kTWFuaWZlc3RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCmNoYW5uZWxzOgotIG1lbWZzOi8vY2x1c3RlcnMuZXhhbXBsZS5jb20vbWluaW1hbC1qc29uLmV4YW1wbGUuY29tL2FkZG9ucy9ib290c3RyYXAtY2hhbm5lbC55YW1sCgpfX0VPRl9LVUJFX0VOVgoKZG93bmxvYWQtcmVsZWFzZQplY2hvICI9PSBub2RldXAgbm9kZSBjb25maWcgZG9uZSA9PSIK +IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKa3ViZVByb3h5OgogIGNsdXN0ZXJDSURSOiAxMDAuOTYuMC4wLzExCiAgY3B1UmVxdWVzdDogMTAwbQogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtcHJveHk6djEuMTQuMAogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIC0gMzQ2ZjkzOTQzOTNlZThkYjVmOGJkMWUyMjllZTlkOTBlNWIzNjkzMWJkZDc1NDMwOGIyYWU2ODg4NGRkNjgyMkBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvc3RhdGljL3N0YWJsZS94ODZfNjQvZG9ja2VyLTE4LjA2LjMtY2UudGd6CiAgYXJtNjQ6CiAgLSBkZjM4ZTA0NTc2MDI2MzkzMDU1Y2NjNzdjMGRjZTczNjEyOTk2NTYxQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlbGV0CiAgLSAwMWMyYjZiNDNkMzZiNmJmYWZjODBhMzczNzM5MWMxOWViZmI4YWQ1QGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlY3RsCiAgLSA3ZmVjOTFhZjc4ZTk1NDhkZjMwNmYwZWM0M2JlYTUyN2M4YzEwY2MzYTk2ODJjMzNlOTcxYzg1MjJhN2ZjZGVkQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvbmV0d29yay1wbHVnaW5zL2NuaS1wbHVnaW5zLWFybTY0LXYwLjcuNS50Z3oKICAtIGRlZmIyY2NjOTVjMDgyNTgzMzIxNmM4YjllMGUxNWJhYWE1MWJjZWRiM2VmYzFmMzkzZjUzNTJkMTg0ZGVhZDRAaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3N0YXRpYy9zdGFibGUvYWFyY2g2NC9kb2NrZXItMTguMDYuMy1jZS50Z3oKQ2x1c3Rlck5hbWU6IG1pbmltYWwtanNvbi5leGFtcGxlLmNvbQpDb25maWdCYXNlOiBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtanNvbi5leGFtcGxlLmNvbQpJbnN0YW5jZUdyb3VwTmFtZTogbm9kZXMKSW5zdGFuY2VHcm91cFJvbGU6IE5vZGUKS3ViZWxldENvbmZpZzoKICBhbm9ueW1vdXNBdXRoOiBmYWxzZQogIGNncm91cFJvb3Q6IC8KICBjbG91ZFByb3ZpZGVyOiBhd3MKICBjbHVzdGVyRE5TOiAxMDAuNjQuMC4xMAogIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICBlbmFibGVEZWJ1Z2dpbmdIYW5kbGVyczogdHJ1ZQogIGV2aWN0aW9uSGFyZDogbWVtb3J5LmF2YWlsYWJsZTwxMDBNaSxub2RlZnMuYXZhaWxhYmxlPDEwJSxub2RlZnMuaW5vZGVzRnJlZTw1JSxpbWFnZWZzLmF2YWlsYWJsZTwxMCUsaW1hZ2Vmcy5pbm9kZXNGcmVlPDUlCiAgZmVhdHVyZUdhdGVzOgogICAgRXhwZXJpbWVudGFsQ3JpdGljYWxQb2RBbm5vdGF0aW9uOiAidHJ1ZSIKICBob3N0bmFtZU92ZXJyaWRlOiAnQGF3cycKICBrdWJlY29uZmlnUGF0aDogL3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnCiAgbG9nTGV2ZWw6IDIKICBuZXR3b3JrUGx1Z2luTVRVOiA5MDAxCiAgbmV0d29ya1BsdWdpbk5hbWU6IGt1YmVuZXQKICBub2RlTGFiZWxzOgogICAga3ViZXJuZXRlcy5pby9yb2xlOiBub2RlCiAgICBub2RlLXJvbGUua3ViZXJuZXRlcy5pby9ub2RlOiAiIgogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKY2hhbm5lbHM6Ci0gbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLWpzb24uZXhhbXBsZS5jb20vYWRkb25zL2Jvb3RzdHJhcC1jaGFubmVsLnlhbWwKCl9fRU9GX0tVQkVfRU5WCgpkb3dubG9hZC1yZWxlYXNlCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBkb25lID09Igo= diff --git a/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_master-us-test-1a.masters.minimal-tf11.example.com_user_data b/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_master-us-test-1a.masters.minimal-tf11.example.com_user_data index 9a11364ad9989..74aa6659326d0 100644 --- a/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_master-us-test-1a.masters.minimal-tf11.example.com_user_data +++ b/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_master-us-test-1a.masters.minimal-tf11.example.com_user_data @@ -1 +1 @@ -IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKZW5jcnlwdGlvbkNvbmZpZzogbnVsbApldGNkQ2x1c3RlcnM6CiAgZXZlbnRzOgogICAgdmVyc2lvbjogMy4zLjEwCiAgbWFpbjoKICAgIHZlcnNpb246IDMuMy4xMAprdWJlQVBJU2VydmVyOgogIGFsbG93UHJpdmlsZWdlZDogdHJ1ZQogIGFub255bW91c0F1dGg6IGZhbHNlCiAgYXBpU2VydmVyQ291bnQ6IDEKICBhdXRob3JpemF0aW9uTW9kZTogQWx3YXlzQWxsb3cKICBiaW5kQWRkcmVzczogMC4wLjAuMAogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGVuYWJsZUFkbWlzc2lvblBsdWdpbnM6CiAgLSBOYW1lc3BhY2VMaWZlY3ljbGUKICAtIExpbWl0UmFuZ2VyCiAgLSBTZXJ2aWNlQWNjb3VudAogIC0gUGVyc2lzdGVudFZvbHVtZUxhYmVsCiAgLSBEZWZhdWx0U3RvcmFnZUNsYXNzCiAgLSBEZWZhdWx0VG9sZXJhdGlvblNlY29uZHMKICAtIE11dGF0aW5nQWRtaXNzaW9uV2ViaG9vawogIC0gVmFsaWRhdGluZ0FkbWlzc2lvbldlYmhvb2sKICAtIE5vZGVSZXN0cmljdGlvbgogIC0gUmVzb3VyY2VRdW90YQogIGV0Y2RTZXJ2ZXJzOgogIC0gaHR0cDovLzEyNy4wLjAuMTo0MDAxCiAgZXRjZFNlcnZlcnNPdmVycmlkZXM6CiAgLSAvZXZlbnRzI2h0dHA6Ly8xMjcuMC4wLjE6NDAwMgogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtYXBpc2VydmVyOnYxLjE0LjAKICBpbnNlY3VyZUJpbmRBZGRyZXNzOiAxMjcuMC4wLjEKICBpbnNlY3VyZVBvcnQ6IDgwODAKICBrdWJlbGV0UHJlZmVycmVkQWRkcmVzc1R5cGVzOgogIC0gSW50ZXJuYWxJUAogIC0gSG9zdG5hbWUKICAtIEV4dGVybmFsSVAKICBsb2dMZXZlbDogMgogIHJlcXVlc3RoZWFkZXJBbGxvd2VkTmFtZXM6CiAgLSBhZ2dyZWdhdG9yCiAgcmVxdWVzdGhlYWRlckV4dHJhSGVhZGVyUHJlZml4ZXM6CiAgLSBYLVJlbW90ZS1FeHRyYS0KICByZXF1ZXN0aGVhZGVyR3JvdXBIZWFkZXJzOgogIC0gWC1SZW1vdGUtR3JvdXAKICByZXF1ZXN0aGVhZGVyVXNlcm5hbWVIZWFkZXJzOgogIC0gWC1SZW1vdGUtVXNlcgogIHNlY3VyZVBvcnQ6IDQ0MwogIHNlcnZpY2VDbHVzdGVySVBSYW5nZTogMTAwLjY0LjAuMC8xMwogIHN0b3JhZ2VCYWNrZW5kOiBldGNkMwprdWJlQ29udHJvbGxlck1hbmFnZXI6CiAgYWxsb2NhdGVOb2RlQ0lEUnM6IHRydWUKICBhdHRhY2hEZXRhY2hSZWNvbmNpbGVTeW5jUGVyaW9kOiAxbTBzCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjbHVzdGVyTmFtZTogbWluaW1hbC10ZjExLmV4YW1wbGUuY29tCiAgY29uZmlndXJlQ2xvdWRSb3V0ZXM6IHRydWUKICBpbWFnZTogazhzLmdjci5pby9rdWJlLWNvbnRyb2xsZXItbWFuYWdlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCiAgdXNlU2VydmljZUFjY291bnRDcmVkZW50aWFsczogdHJ1ZQprdWJlUHJveHk6CiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjcHVSZXF1ZXN0OiAxMDBtCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAgaW1hZ2U6IGs4cy5nY3IuaW8va3ViZS1wcm94eTp2MS4xNC4wCiAgbG9nTGV2ZWw6IDIKa3ViZVNjaGVkdWxlcjoKICBpbWFnZTogazhzLmdjci5pby9rdWJlLXNjaGVkdWxlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwptYXN0ZXJLdWJlbGV0OgogIGFub255bW91c0F1dGg6IGZhbHNlCiAgY2dyb3VwUm9vdDogLwogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGNsdXN0ZXJETlM6IDEwMC42NC4wLjEwCiAgY2x1c3RlckRvbWFpbjogY2x1c3Rlci5sb2NhbAogIGVuYWJsZURlYnVnZ2luZ0hhbmRsZXJzOiB0cnVlCiAgZXZpY3Rpb25IYXJkOiBtZW1vcnkuYXZhaWxhYmxlPDEwME1pLG5vZGVmcy5hdmFpbGFibGU8MTAlLG5vZGVmcy5pbm9kZXNGcmVlPDUlLGltYWdlZnMuYXZhaWxhYmxlPDEwJSxpbWFnZWZzLmlub2Rlc0ZyZWU8NSUKICBmZWF0dXJlR2F0ZXM6CiAgICBFeHBlcmltZW50YWxDcml0aWNhbFBvZEFubm90YXRpb246ICJ0cnVlIgogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGt1YmVjb25maWdQYXRoOiAvdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcKICBsb2dMZXZlbDogMgogIG5ldHdvcmtQbHVnaW5NVFU6IDkwMDEKICBuZXR3b3JrUGx1Z2luTmFtZToga3ViZW5ldAogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICByZWdpc3RlclNjaGVkdWxhYmxlOiBmYWxzZQoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIGFybTY0OgogIC0gZGYzOGUwNDU3NjAyNjM5MzA1NWNjYzc3YzBkY2U3MzYxMjk5NjU2MUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWxldAogIC0gMDFjMmI2YjQzZDM2YjZiZmFmYzgwYTM3MzczOTFjMTllYmZiOGFkNUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWN0bAogIC0gN2ZlYzkxYWY3OGU5NTQ4ZGYzMDZmMGVjNDNiZWE1MjdjOGMxMGNjM2E5NjgyYzMzZTk3MWM4NTIyYTdmY2RlZEBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL25ldHdvcmstcGx1Z2lucy9jbmktcGx1Z2lucy1hcm02NC12MC43LjUudGd6CkNsdXN0ZXJOYW1lOiBtaW5pbWFsLXRmMTEuZXhhbXBsZS5jb20KQ29uZmlnQmFzZTogbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLXRmMTEuZXhhbXBsZS5jb20KSW5zdGFuY2VHcm91cE5hbWU6IG1hc3Rlci11cy10ZXN0LTFhCkluc3RhbmNlR3JvdXBSb2xlOiBNYXN0ZXIKS3ViZWxldENvbmZpZzoKICBhbm9ueW1vdXNBdXRoOiBmYWxzZQogIGNncm91cFJvb3Q6IC8KICBjbG91ZFByb3ZpZGVyOiBhd3MKICBjbHVzdGVyRE5TOiAxMDAuNjQuMC4xMAogIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICBlbmFibGVEZWJ1Z2dpbmdIYW5kbGVyczogdHJ1ZQogIGV2aWN0aW9uSGFyZDogbWVtb3J5LmF2YWlsYWJsZTwxMDBNaSxub2RlZnMuYXZhaWxhYmxlPDEwJSxub2RlZnMuaW5vZGVzRnJlZTw1JSxpbWFnZWZzLmF2YWlsYWJsZTwxMCUsaW1hZ2Vmcy5pbm9kZXNGcmVlPDUlCiAgZmVhdHVyZUdhdGVzOgogICAgRXhwZXJpbWVudGFsQ3JpdGljYWxQb2RBbm5vdGF0aW9uOiAidHJ1ZSIKICBob3N0bmFtZU92ZXJyaWRlOiAnQGF3cycKICBrdWJlY29uZmlnUGF0aDogL3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnCiAgbG9nTGV2ZWw6IDIKICBuZXR3b3JrUGx1Z2luTVRVOiA5MDAxCiAgbmV0d29ya1BsdWdpbk5hbWU6IGt1YmVuZXQKICBub2RlTGFiZWxzOgogICAga3ViZXJuZXRlcy5pby9yb2xlOiBtYXN0ZXIKICAgIG5vZGUtcm9sZS5rdWJlcm5ldGVzLmlvL21hc3RlcjogIiIKICBub25NYXNxdWVyYWRlQ0lEUjogMTAwLjY0LjAuMC8xMAogIHBvZEluZnJhQ29udGFpbmVySW1hZ2U6IGs4cy5nY3IuaW8vcGF1c2U6My4yCiAgcG9kTWFuaWZlc3RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCiAgcmVnaXN0ZXJTY2hlZHVsYWJsZTogZmFsc2UKY2hhbm5lbHM6Ci0gbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLXRmMTEuZXhhbXBsZS5jb20vYWRkb25zL2Jvb3RzdHJhcC1jaGFubmVsLnlhbWwKZXRjZE1hbmlmZXN0czoKLSBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtdGYxMS5leGFtcGxlLmNvbS9tYW5pZmVzdHMvZXRjZC9tYWluLnlhbWwKLSBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtdGYxMS5leGFtcGxlLmNvbS9tYW5pZmVzdHMvZXRjZC9ldmVudHMueWFtbApwcm90b2t1YmVJbWFnZToKICBhbWQ2NDoKICAgIGhhc2g6IDdiM2M3ZjZhZGJkYTExYjFlYzc0MGJkNmI5NjljODRmMjQ5YjdlZWU4MThhZjk1ZjJkMzIxOTYzMDg4MjQ1YTgKICAgIG5hbWU6IHByb3Rva3ViZToxLjE5LjAtYWxwaGEuMwogICAgc291cmNlczoKICAgIC0gaHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hbWQ2NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMva29wcy9yZWxlYXNlcy9kb3dubG9hZC92MS4xOS4wLWFscGhhLjMvaW1hZ2VzLXByb3Rva3ViZS1hbWQ2NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hbWQ2NC50YXIuZ3oKICBhcm02NDoKICAgIGhhc2g6IDY5MjcwY2E5YzFjOTUwYmU2NWFmNDAzMzdhZGZjY2VjMGE3Mjg5MzBmYTMyMjRiYjBkMmU4OGYxODFmMzllYWQKICAgIG5hbWU6IHByb3Rva3ViZToxLjE5LjAtYWxwaGEuMwogICAgc291cmNlczoKICAgIC0gaHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hcm02NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2t1YmVybmV0ZXMva29wcy9yZWxlYXNlcy9kb3dubG9hZC92MS4xOS4wLWFscGhhLjMvaW1hZ2VzLXByb3Rva3ViZS1hcm02NC50YXIuZ3oKICAgIC0gaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvaW1hZ2VzL3Byb3Rva3ViZS1hcm02NC50YXIuZ3oKCl9fRU9GX0tVQkVfRU5WCgpkb3dubG9hZC1yZWxlYXNlCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBkb25lID09Igo= +IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKZW5jcnlwdGlvbkNvbmZpZzogbnVsbApldGNkQ2x1c3RlcnM6CiAgZXZlbnRzOgogICAgdmVyc2lvbjogMy4zLjEwCiAgbWFpbjoKICAgIHZlcnNpb246IDMuMy4xMAprdWJlQVBJU2VydmVyOgogIGFsbG93UHJpdmlsZWdlZDogdHJ1ZQogIGFub255bW91c0F1dGg6IGZhbHNlCiAgYXBpU2VydmVyQ291bnQ6IDEKICBhdXRob3JpemF0aW9uTW9kZTogQWx3YXlzQWxsb3cKICBiaW5kQWRkcmVzczogMC4wLjAuMAogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGVuYWJsZUFkbWlzc2lvblBsdWdpbnM6CiAgLSBOYW1lc3BhY2VMaWZlY3ljbGUKICAtIExpbWl0UmFuZ2VyCiAgLSBTZXJ2aWNlQWNjb3VudAogIC0gUGVyc2lzdGVudFZvbHVtZUxhYmVsCiAgLSBEZWZhdWx0U3RvcmFnZUNsYXNzCiAgLSBEZWZhdWx0VG9sZXJhdGlvblNlY29uZHMKICAtIE11dGF0aW5nQWRtaXNzaW9uV2ViaG9vawogIC0gVmFsaWRhdGluZ0FkbWlzc2lvbldlYmhvb2sKICAtIE5vZGVSZXN0cmljdGlvbgogIC0gUmVzb3VyY2VRdW90YQogIGV0Y2RTZXJ2ZXJzOgogIC0gaHR0cDovLzEyNy4wLjAuMTo0MDAxCiAgZXRjZFNlcnZlcnNPdmVycmlkZXM6CiAgLSAvZXZlbnRzI2h0dHA6Ly8xMjcuMC4wLjE6NDAwMgogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtYXBpc2VydmVyOnYxLjE0LjAKICBpbnNlY3VyZUJpbmRBZGRyZXNzOiAxMjcuMC4wLjEKICBpbnNlY3VyZVBvcnQ6IDgwODAKICBrdWJlbGV0UHJlZmVycmVkQWRkcmVzc1R5cGVzOgogIC0gSW50ZXJuYWxJUAogIC0gSG9zdG5hbWUKICAtIEV4dGVybmFsSVAKICBsb2dMZXZlbDogMgogIHJlcXVlc3RoZWFkZXJBbGxvd2VkTmFtZXM6CiAgLSBhZ2dyZWdhdG9yCiAgcmVxdWVzdGhlYWRlckV4dHJhSGVhZGVyUHJlZml4ZXM6CiAgLSBYLVJlbW90ZS1FeHRyYS0KICByZXF1ZXN0aGVhZGVyR3JvdXBIZWFkZXJzOgogIC0gWC1SZW1vdGUtR3JvdXAKICByZXF1ZXN0aGVhZGVyVXNlcm5hbWVIZWFkZXJzOgogIC0gWC1SZW1vdGUtVXNlcgogIHNlY3VyZVBvcnQ6IDQ0MwogIHNlcnZpY2VDbHVzdGVySVBSYW5nZTogMTAwLjY0LjAuMC8xMwogIHN0b3JhZ2VCYWNrZW5kOiBldGNkMwprdWJlQ29udHJvbGxlck1hbmFnZXI6CiAgYWxsb2NhdGVOb2RlQ0lEUnM6IHRydWUKICBhdHRhY2hEZXRhY2hSZWNvbmNpbGVTeW5jUGVyaW9kOiAxbTBzCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjbHVzdGVyTmFtZTogbWluaW1hbC10ZjExLmV4YW1wbGUuY29tCiAgY29uZmlndXJlQ2xvdWRSb3V0ZXM6IHRydWUKICBpbWFnZTogazhzLmdjci5pby9rdWJlLWNvbnRyb2xsZXItbWFuYWdlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCiAgdXNlU2VydmljZUFjY291bnRDcmVkZW50aWFsczogdHJ1ZQprdWJlUHJveHk6CiAgY2x1c3RlckNJRFI6IDEwMC45Ni4wLjAvMTEKICBjcHVSZXF1ZXN0OiAxMDBtCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAgaW1hZ2U6IGs4cy5nY3IuaW8va3ViZS1wcm94eTp2MS4xNC4wCiAgbG9nTGV2ZWw6IDIKa3ViZVNjaGVkdWxlcjoKICBpbWFnZTogazhzLmdjci5pby9rdWJlLXNjaGVkdWxlcjp2MS4xNC4wCiAgbGVhZGVyRWxlY3Rpb246CiAgICBsZWFkZXJFbGVjdDogdHJ1ZQogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwptYXN0ZXJLdWJlbGV0OgogIGFub255bW91c0F1dGg6IGZhbHNlCiAgY2dyb3VwUm9vdDogLwogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGNsdXN0ZXJETlM6IDEwMC42NC4wLjEwCiAgY2x1c3RlckRvbWFpbjogY2x1c3Rlci5sb2NhbAogIGVuYWJsZURlYnVnZ2luZ0hhbmRsZXJzOiB0cnVlCiAgZXZpY3Rpb25IYXJkOiBtZW1vcnkuYXZhaWxhYmxlPDEwME1pLG5vZGVmcy5hdmFpbGFibGU8MTAlLG5vZGVmcy5pbm9kZXNGcmVlPDUlLGltYWdlZnMuYXZhaWxhYmxlPDEwJSxpbWFnZWZzLmlub2Rlc0ZyZWU8NSUKICBmZWF0dXJlR2F0ZXM6CiAgICBFeHBlcmltZW50YWxDcml0aWNhbFBvZEFubm90YXRpb246ICJ0cnVlIgogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGt1YmVjb25maWdQYXRoOiAvdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcKICBsb2dMZXZlbDogMgogIG5ldHdvcmtQbHVnaW5NVFU6IDkwMDEKICBuZXR3b3JrUGx1Z2luTmFtZToga3ViZW5ldAogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICByZWdpc3RlclNjaGVkdWxhYmxlOiBmYWxzZQoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIC0gMzQ2ZjkzOTQzOTNlZThkYjVmOGJkMWUyMjllZTlkOTBlNWIzNjkzMWJkZDc1NDMwOGIyYWU2ODg4NGRkNjgyMkBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvc3RhdGljL3N0YWJsZS94ODZfNjQvZG9ja2VyLTE4LjA2LjMtY2UudGd6CiAgYXJtNjQ6CiAgLSBkZjM4ZTA0NTc2MDI2MzkzMDU1Y2NjNzdjMGRjZTczNjEyOTk2NTYxQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlbGV0CiAgLSAwMWMyYjZiNDNkMzZiNmJmYWZjODBhMzczNzM5MWMxOWViZmI4YWQ1QGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlY3RsCiAgLSA3ZmVjOTFhZjc4ZTk1NDhkZjMwNmYwZWM0M2JlYTUyN2M4YzEwY2MzYTk2ODJjMzNlOTcxYzg1MjJhN2ZjZGVkQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvbmV0d29yay1wbHVnaW5zL2NuaS1wbHVnaW5zLWFybTY0LXYwLjcuNS50Z3oKICAtIGRlZmIyY2NjOTVjMDgyNTgzMzIxNmM4YjllMGUxNWJhYWE1MWJjZWRiM2VmYzFmMzkzZjUzNTJkMTg0ZGVhZDRAaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3N0YXRpYy9zdGFibGUvYWFyY2g2NC9kb2NrZXItMTguMDYuMy1jZS50Z3oKQ2x1c3Rlck5hbWU6IG1pbmltYWwtdGYxMS5leGFtcGxlLmNvbQpDb25maWdCYXNlOiBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtdGYxMS5leGFtcGxlLmNvbQpJbnN0YW5jZUdyb3VwTmFtZTogbWFzdGVyLXVzLXRlc3QtMWEKSW5zdGFuY2VHcm91cFJvbGU6IE1hc3RlcgpLdWJlbGV0Q29uZmlnOgogIGFub255bW91c0F1dGg6IGZhbHNlCiAgY2dyb3VwUm9vdDogLwogIGNsb3VkUHJvdmlkZXI6IGF3cwogIGNsdXN0ZXJETlM6IDEwMC42NC4wLjEwCiAgY2x1c3RlckRvbWFpbjogY2x1c3Rlci5sb2NhbAogIGVuYWJsZURlYnVnZ2luZ0hhbmRsZXJzOiB0cnVlCiAgZXZpY3Rpb25IYXJkOiBtZW1vcnkuYXZhaWxhYmxlPDEwME1pLG5vZGVmcy5hdmFpbGFibGU8MTAlLG5vZGVmcy5pbm9kZXNGcmVlPDUlLGltYWdlZnMuYXZhaWxhYmxlPDEwJSxpbWFnZWZzLmlub2Rlc0ZyZWU8NSUKICBmZWF0dXJlR2F0ZXM6CiAgICBFeHBlcmltZW50YWxDcml0aWNhbFBvZEFubm90YXRpb246ICJ0cnVlIgogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGt1YmVjb25maWdQYXRoOiAvdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcKICBsb2dMZXZlbDogMgogIG5ldHdvcmtQbHVnaW5NVFU6IDkwMDEKICBuZXR3b3JrUGx1Z2luTmFtZToga3ViZW5ldAogIG5vZGVMYWJlbHM6CiAgICBrdWJlcm5ldGVzLmlvL3JvbGU6IG1hc3RlcgogICAgbm9kZS1yb2xlLmt1YmVybmV0ZXMuaW8vbWFzdGVyOiAiIgogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICByZWdpc3RlclNjaGVkdWxhYmxlOiBmYWxzZQpjaGFubmVsczoKLSBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtdGYxMS5leGFtcGxlLmNvbS9hZGRvbnMvYm9vdHN0cmFwLWNoYW5uZWwueWFtbApldGNkTWFuaWZlc3RzOgotIG1lbWZzOi8vY2x1c3RlcnMuZXhhbXBsZS5jb20vbWluaW1hbC10ZjExLmV4YW1wbGUuY29tL21hbmlmZXN0cy9ldGNkL21haW4ueWFtbAotIG1lbWZzOi8vY2x1c3RlcnMuZXhhbXBsZS5jb20vbWluaW1hbC10ZjExLmV4YW1wbGUuY29tL21hbmlmZXN0cy9ldGNkL2V2ZW50cy55YW1sCnByb3Rva3ViZUltYWdlOgogIGFtZDY0OgogICAgaGFzaDogN2IzYzdmNmFkYmRhMTFiMWVjNzQwYmQ2Yjk2OWM4NGYyNDliN2VlZTgxOGFmOTVmMmQzMjE5NjMwODgyNDVhOAogICAgbmFtZTogcHJvdG9rdWJlOjEuMTkuMC1hbHBoYS4zCiAgICBzb3VyY2VzOgogICAgLSBodHRwczovL2FydGlmYWN0cy5rOHMuaW8vYmluYXJpZXMva29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFtZDY0LnRhci5negogICAgLSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9pbWFnZXMtcHJvdG9rdWJlLWFtZDY0LnRhci5negogICAgLSBodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFtZDY0LnRhci5negogIGFybTY0OgogICAgaGFzaDogNjkyNzBjYTljMWM5NTBiZTY1YWY0MDMzN2FkZmNjZWMwYTcyODkzMGZhMzIyNGJiMGQyZTg4ZjE4MWYzOWVhZAogICAgbmFtZTogcHJvdG9rdWJlOjEuMTkuMC1hbHBoYS4zCiAgICBzb3VyY2VzOgogICAgLSBodHRwczovL2FydGlmYWN0cy5rOHMuaW8vYmluYXJpZXMva29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFybTY0LnRhci5negogICAgLSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9pbWFnZXMtcHJvdG9rdWJlLWFybTY0LnRhci5negogICAgLSBodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9pbWFnZXMvcHJvdG9rdWJlLWFybTY0LnRhci5negoKX19FT0ZfS1VCRV9FTlYKCmRvd25sb2FkLXJlbGVhc2UKZWNobyAiPT0gbm9kZXVwIG5vZGUgY29uZmlnIGRvbmUgPT0iCg== diff --git a/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_nodes.minimal-tf11.example.com_user_data b/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_nodes.minimal-tf11.example.com_user_data index 01f3e39612e12..b964e085c4963 100644 --- a/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_nodes.minimal-tf11.example.com_user_data +++ b/tests/integration/update_cluster/minimal-tf11/data/aws_launch_template_nodes.minimal-tf11.example.com_user_data @@ -1 +1 @@ -IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKa3ViZVByb3h5OgogIGNsdXN0ZXJDSURSOiAxMDAuOTYuMC4wLzExCiAgY3B1UmVxdWVzdDogMTAwbQogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtcHJveHk6djEuMTQuMAogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIGFybTY0OgogIC0gZGYzOGUwNDU3NjAyNjM5MzA1NWNjYzc3YzBkY2U3MzYxMjk5NjU2MUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWxldAogIC0gMDFjMmI2YjQzZDM2YjZiZmFmYzgwYTM3MzczOTFjMTllYmZiOGFkNUBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvdjEuMTQuMC9iaW4vbGludXgvYXJtNjQva3ViZWN0bAogIC0gN2ZlYzkxYWY3OGU5NTQ4ZGYzMDZmMGVjNDNiZWE1MjdjOGMxMGNjM2E5NjgyYzMzZTk3MWM4NTIyYTdmY2RlZEBodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL25ldHdvcmstcGx1Z2lucy9jbmktcGx1Z2lucy1hcm02NC12MC43LjUudGd6CkNsdXN0ZXJOYW1lOiBtaW5pbWFsLXRmMTEuZXhhbXBsZS5jb20KQ29uZmlnQmFzZTogbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLXRmMTEuZXhhbXBsZS5jb20KSW5zdGFuY2VHcm91cE5hbWU6IG5vZGVzCkluc3RhbmNlR3JvdXBSb2xlOiBOb2RlCkt1YmVsZXRDb25maWc6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9kZUxhYmVsczoKICAgIGt1YmVybmV0ZXMuaW8vcm9sZTogbm9kZQogICAgbm9kZS1yb2xlLmt1YmVybmV0ZXMuaW8vbm9kZTogIiIKICBub25NYXNxdWVyYWRlQ0lEUjogMTAwLjY0LjAuMC8xMAogIHBvZEluZnJhQ29udGFpbmVySW1hZ2U6IGs4cy5nY3IuaW8vcGF1c2U6My4yCiAgcG9kTWFuaWZlc3RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCmNoYW5uZWxzOgotIG1lbWZzOi8vY2x1c3RlcnMuZXhhbXBsZS5jb20vbWluaW1hbC10ZjExLmV4YW1wbGUuY29tL2FkZG9ucy9ib290c3RyYXAtY2hhbm5lbC55YW1sCgpfX0VPRl9LVUJFX0VOVgoKZG93bmxvYWQtcmVsZWFzZQplY2hvICI9PSBub2RldXAgbm9kZSBjb25maWcgZG9uZSA9PSIK +IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNiBUaGUgS3ViZXJuZXRlcyBBdXRob3JzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpzZXQgLW8gZXJyZXhpdApzZXQgLW8gbm91bnNldApzZXQgLW8gcGlwZWZhaWwKCk5PREVVUF9VUkxfQU1ENjQ9aHR0cHM6Ly9hcnRpZmFjdHMuazhzLmlvL2JpbmFyaWVzL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYW1kNjQvbm9kZXVwLGh0dHBzOi8vZ2l0aHViLmNvbS9rdWJlcm5ldGVzL2tvcHMvcmVsZWFzZXMvZG93bmxvYWQvdjEuMTkuMC1hbHBoYS4zL25vZGV1cC1saW51eC1hbWQ2NCxodHRwczovL2t1YmV1cHYyLnMzLmFtYXpvbmF3cy5jb20va29wcy8xLjE5LjAtYWxwaGEuMy9saW51eC9hbWQ2NC9ub2RldXAKTk9ERVVQX0hBU0hfQU1ENjQ9Njk4MGZkYTRmYTM3YmJkYzA0MzczOGNmNGRkYWM2Mzg4ZWI1N2Y1NjE4OTVjNjkyOTljMWIwZWUyNjNkNDY1ZApOT0RFVVBfVVJMX0FSTTY0PWh0dHBzOi8vYXJ0aWZhY3RzLms4cy5pby9iaW5hcmllcy9rb3BzLzEuMTkuMC1hbHBoYS4zL2xpbnV4L2FybTY0L25vZGV1cCxodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rb3BzL3JlbGVhc2VzL2Rvd25sb2FkL3YxLjE5LjAtYWxwaGEuMy9ub2RldXAtbGludXgtYXJtNjQsaHR0cHM6Ly9rdWJldXB2Mi5zMy5hbWF6b25hd3MuY29tL2tvcHMvMS4xOS4wLWFscGhhLjMvbGludXgvYXJtNjQvbm9kZXVwCk5PREVVUF9IQVNIX0FSTTY0PWRjYzdmOWYzYzE4MGVlNzZhNTExNjI3ZTQ2ZGEwYWM2OWNkY2I1MThjZGYzYmUzNDhlNWVkMDQ2ZDQ5MWViODcKCmV4cG9ydCBBV1NfUkVHSU9OPXVzLXRlc3QtMQoKCgoKZnVuY3Rpb24gZW5zdXJlLWluc3RhbGwtZGlyKCkgewogIElOU1RBTExfRElSPSIvb3B0L2tvcHMiCiAgIyBPbiBDb250YWluZXJPUywgd2UgaW5zdGFsbCB1bmRlciAvdmFyL2xpYi90b29sYm94OyAvb3B0IGlzIHJvIGFuZCBub2V4ZWMKICBpZiBbWyAtZCAvdmFyL2xpYi90b29sYm94IF1dOyB0aGVuCiAgICBJTlNUQUxMX0RJUj0iL3Zhci9saWIvdG9vbGJveC9rb3BzIgogIGZpCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vYmluCiAgbWtkaXIgLXAgJHtJTlNUQUxMX0RJUn0vY29uZgogIGNkICR7SU5TVEFMTF9ESVJ9Cn0KCiMgUmV0cnkgYSBkb3dubG9hZCB1bnRpbCB3ZSBnZXQgaXQuIGFyZ3M6IG5hbWUsIHNoYSwgdXJsMSwgdXJsMi4uLgpkb3dubG9hZC1vci1idXN0KCkgewogIGxvY2FsIC1yIGZpbGU9IiQxIgogIGxvY2FsIC1yIGhhc2g9IiQyIgogIHNoaWZ0IDIKCiAgdXJscz0oICQqICkKICB3aGlsZSB0cnVlOyBkbwogICAgZm9yIHVybCBpbiAiJHt1cmxzW0BdfSI7IGRvCiAgICAgIGNvbW1hbmRzPSgKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLS1jb21wcmVzc2VkIC1MbyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQgMjAgLS1yZXRyeSA2IC0tcmV0cnktZGVsYXkgMTAiCiAgICAgICAgIndnZXQgLS1pbmV0NC1vbmx5IC0tY29tcHJlc3Npb249YXV0byAtTyAiJHtmaWxlfSIgLS1jb25uZWN0LXRpbWVvdXQ9MjAgLS10cmllcz02IC0td2FpdD0xMCIKICAgICAgICAiY3VybCAtZiAtLWlwdjQgLUxvICIke2ZpbGV9IiAtLWNvbm5lY3QtdGltZW91dCAyMCAtLXJldHJ5IDYgLS1yZXRyeS1kZWxheSAxMCIKICAgICAgICAid2dldCAtLWluZXQ0LW9ubHkgLU8gIiR7ZmlsZX0iIC0tY29ubmVjdC10aW1lb3V0PTIwIC0tdHJpZXM9NiAtLXdhaXQ9MTAiCiAgICAgICkKICAgICAgZm9yIGNtZCBpbiAiJHtjb21tYW5kc1tAXX0iOyBkbwogICAgICAgIGVjaG8gIkF0dGVtcHRpbmcgZG93bmxvYWQgd2l0aDogJHtjbWR9IHt1cmx9IgogICAgICAgIGlmICEgKCR7Y21kfSAiJHt1cmx9Iik7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IERvd25sb2FkIGZhaWxlZCB3aXRoICR7Y21kfSA9PSIKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZmkKICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV0gJiYgISB2YWxpZGF0ZS1oYXNoICIke2ZpbGV9IiAiJHtoYXNofSI7IHRoZW4KICAgICAgICAgIGVjaG8gIj09IEhhc2ggdmFsaWRhdGlvbiBvZiAke3VybH0gZmFpbGVkLiBSZXRyeWluZy4gPT0iCiAgICAgICAgICBybSAtZiAiJHtmaWxlfSIKICAgICAgICBlbHNlCiAgICAgICAgICBpZiBbWyAtbiAiJHtoYXNofSIgXV07IHRoZW4KICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gKFNIQTEgPSAke2hhc2h9KSA9PSIKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAiPT0gRG93bmxvYWRlZCAke3VybH0gPT0iCiAgICAgICAgICBmaQogICAgICAgICAgcmV0dXJuCiAgICAgICAgZmkKICAgICAgZG9uZQogICAgZG9uZQoKICAgIGVjaG8gIkFsbCBkb3dubG9hZHMgZmFpbGVkOyBzbGVlcGluZyBiZWZvcmUgcmV0cnlpbmciCiAgICBzbGVlcCA2MAogIGRvbmUKfQoKdmFsaWRhdGUtaGFzaCgpIHsKICBsb2NhbCAtciBmaWxlPSIkMSIKICBsb2NhbCAtciBleHBlY3RlZD0iJDIiCiAgbG9jYWwgYWN0dWFsCgogIGFjdHVhbD0kKHNoYTI1NnN1bSAke2ZpbGV9IHwgYXdrICd7IHByaW50ICQxIH0nKSB8fCB0cnVlCiAgaWYgW1sgIiR7YWN0dWFsfSIgIT0gIiR7ZXhwZWN0ZWR9IiBdXTsgdGhlbgogICAgZWNobyAiPT0gJHtmaWxlfSBjb3JydXB0ZWQsIGhhc2ggJHthY3R1YWx9IGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgJHtleHBlY3RlZH0gPT0iCiAgICByZXR1cm4gMQogIGZpCn0KCmZ1bmN0aW9uIHNwbGl0LWNvbW1hcygpIHsKICBlY2hvICQxIHwgdHIgIiwiICJcbiIKfQoKZnVuY3Rpb24gdHJ5LWRvd25sb2FkLXJlbGVhc2UoKSB7CiAgbG9jYWwgLXIgbm9kZXVwX3VybHM9KCAkKHNwbGl0LWNvbW1hcyAiJHtOT0RFVVBfVVJMfSIpICkKICBpZiBbWyAtbiAiJHtOT0RFVVBfSEFTSDotfSIgXV07IHRoZW4KICAgIGxvY2FsIC1yIG5vZGV1cF9oYXNoPSIke05PREVVUF9IQVNIfSIKICBlbHNlCiAgIyBUT0RPOiBSZW1vdmU/CiAgICBlY2hvICJEb3dubG9hZGluZyBzaGEyNTYgKG5vdCBmb3VuZCBpbiBlbnYpIgogICAgZG93bmxvYWQtb3ItYnVzdCBub2RldXAuc2hhMjU2ICIiICIke25vZGV1cF91cmxzW0BdLyUvLnNoYTI1Nn0iCiAgICBsb2NhbCAtciBub2RldXBfaGFzaD0kKGNhdCBub2RldXAuc2hhMjU2KQogIGZpCgogIGVjaG8gIkRvd25sb2FkaW5nIG5vZGV1cCAoJHtub2RldXBfdXJsc1tAXX0pIgogIGRvd25sb2FkLW9yLWJ1c3Qgbm9kZXVwICIke25vZGV1cF9oYXNofSIgIiR7bm9kZXVwX3VybHNbQF19IgoKICBjaG1vZCAreCBub2RldXAKfQoKZnVuY3Rpb24gZG93bmxvYWQtcmVsZWFzZSgpIHsKICBjYXNlICIkKHVuYW1lIC1tKSIgaW4KICB4ODZfNjQqfGk/ODZfNjQqfGFtZDY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BTUQ2NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BTUQ2NH0iCiAgICA7OwogIGFhcmNoNjQqfGFybTY0KikKICAgIE5PREVVUF9VUkw9IiR7Tk9ERVVQX1VSTF9BUk02NH0iCiAgICBOT0RFVVBfSEFTSD0iJHtOT0RFVVBfSEFTSF9BUk02NH0iCiAgICA7OwogICopCiAgICBlY2hvICJVbnN1cHBvcnRlZCBob3N0IGFyY2g6ICQodW5hbWUgLW0pIiA+JjIKICAgIGV4aXQgMQogICAgOzsKICBlc2FjCgogICMgSW4gY2FzZSBvZiBmYWlsdXJlIGNoZWNraW5nIGludGVncml0eSBvZiByZWxlYXNlLCByZXRyeS4KICBjZCAke0lOU1RBTExfRElSfS9iaW4KICB1bnRpbCB0cnktZG93bmxvYWQtcmVsZWFzZTsgZG8KICAgIHNsZWVwIDE1CiAgICBlY2hvICJDb3VsZG4ndCBkb3dubG9hZCByZWxlYXNlLiBSZXRyeWluZy4uLiIKICBkb25lCgogIGVjaG8gIlJ1bm5pbmcgbm9kZXVwIgogICMgV2UgY2FuJ3QgcnVuIGluIHRoZSBmb3JlZ3JvdW5kIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9kb2NrZXIvaXNzdWVzLzIzNzkzCiAgKCBjZCAke0lOU1RBTExfRElSfS9iaW47IC4vbm9kZXVwIC0taW5zdGFsbC1zeXN0ZW1kLXVuaXQgLS1jb25mPSR7SU5TVEFMTF9ESVJ9L2NvbmYva3ViZV9lbnYueWFtbCAtLXY9OCAgKQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi9iaW4vc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIHx8IGVjaG8gImZhaWxlZCB0byBzZXQgdXAgZW5zdXJlIG1hY2hpbmUtaWQgY29uZmlndXJlZCIKCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBzdGFydGluZyA9PSIKZW5zdXJlLWluc3RhbGwtZGlyCgpjYXQgPiBjb25mL2NsdXN0ZXJfc3BlYy55YW1sIDw8ICdfX0VPRl9DTFVTVEVSX1NQRUMnCmNsb3VkQ29uZmlnOiBudWxsCmNvbnRhaW5lclJ1bnRpbWU6IGRvY2tlcgpjb250YWluZXJkOgogIHNraXBJbnN0YWxsOiB0cnVlCmRvY2tlcjoKICBpcE1hc3E6IGZhbHNlCiAgaXBUYWJsZXM6IGZhbHNlCiAgbG9nRHJpdmVyOiBqc29uLWZpbGUKICBsb2dMZXZlbDogaW5mbwogIGxvZ09wdDoKICAtIG1heC1zaXplPTEwbQogIC0gbWF4LWZpbGU9NQogIHN0b3JhZ2U6IG92ZXJsYXkyLG92ZXJsYXksYXVmcwogIHZlcnNpb246IDE4LjA2LjMKa3ViZVByb3h5OgogIGNsdXN0ZXJDSURSOiAxMDAuOTYuMC4wLzExCiAgY3B1UmVxdWVzdDogMTAwbQogIGhvc3RuYW1lT3ZlcnJpZGU6ICdAYXdzJwogIGltYWdlOiBrOHMuZ2NyLmlvL2t1YmUtcHJveHk6djEuMTQuMAogIGxvZ0xldmVsOiAyCmt1YmVsZXQ6CiAgYW5vbnltb3VzQXV0aDogZmFsc2UKICBjZ3JvdXBSb290OiAvCiAgY2xvdWRQcm92aWRlcjogYXdzCiAgY2x1c3RlckROUzogMTAwLjY0LjAuMTAKICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgZW5hYmxlRGVidWdnaW5nSGFuZGxlcnM6IHRydWUKICBldmljdGlvbkhhcmQ6IG1lbW9yeS5hdmFpbGFibGU8MTAwTWksbm9kZWZzLmF2YWlsYWJsZTwxMCUsbm9kZWZzLmlub2Rlc0ZyZWU8NSUsaW1hZ2Vmcy5hdmFpbGFibGU8MTAlLGltYWdlZnMuaW5vZGVzRnJlZTw1JQogIGZlYXR1cmVHYXRlczoKICAgIEV4cGVyaW1lbnRhbENyaXRpY2FsUG9kQW5ub3RhdGlvbjogInRydWUiCiAgaG9zdG5hbWVPdmVycmlkZTogJ0Bhd3MnCiAga3ViZWNvbmZpZ1BhdGg6IC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogIGxvZ0xldmVsOiAyCiAgbmV0d29ya1BsdWdpbk1UVTogOTAwMQogIG5ldHdvcmtQbHVnaW5OYW1lOiBrdWJlbmV0CiAgbm9uTWFzcXVlcmFkZUNJRFI6IDEwMC42NC4wLjAvMTAKICBwb2RJbmZyYUNvbnRhaW5lckltYWdlOiBrOHMuZ2NyLmlvL3BhdXNlOjMuMgogIHBvZE1hbmlmZXN0UGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwoKX19FT0ZfQ0xVU1RFUl9TUEVDCgpjYXQgPiBjb25mL2lnX3NwZWMueWFtbCA8PCAnX19FT0ZfSUdfU1BFQycKe30KCl9fRU9GX0lHX1NQRUMKCmNhdCA+IGNvbmYva3ViZV9lbnYueWFtbCA8PCAnX19FT0ZfS1VCRV9FTlYnCkFzc2V0czoKICBhbWQ2NDoKICAtIGMzYjczNmZkMGYwMDM3NjVjMTJkOTlmMmM5OTVhODM2OWU2MjQxZjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVsZXQKICAtIDdlM2EzZWE2NjMxNTNmOTAwY2JkNTI5MDBhMzljOTFmYTlmMzM0YmVAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlL3YxLjE0LjAvYmluL2xpbnV4L2FtZDY0L2t1YmVjdGwKICAtIDNjYTE1YzBhMThlZTgzMDUyMGNmM2E5NTQwOGJlODI2Y2JkMjU1YTE1MzVhMzhlMGJlOTYwOGIyNWFkOGJmNjRAaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9uZXR3b3JrLXBsdWdpbnMvY25pLXBsdWdpbnMtYW1kNjQtdjAuNy41LnRnegogIC0gMzQ2ZjkzOTQzOTNlZThkYjVmOGJkMWUyMjllZTlkOTBlNWIzNjkzMWJkZDc1NDMwOGIyYWU2ODg4NGRkNjgyMkBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvc3RhdGljL3N0YWJsZS94ODZfNjQvZG9ja2VyLTE4LjA2LjMtY2UudGd6CiAgYXJtNjQ6CiAgLSBkZjM4ZTA0NTc2MDI2MzkzMDU1Y2NjNzdjMGRjZTczNjEyOTk2NTYxQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlbGV0CiAgLSAwMWMyYjZiNDNkMzZiNmJmYWZjODBhMzczNzM5MWMxOWViZmI4YWQ1QGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvcmVsZWFzZS92MS4xNC4wL2Jpbi9saW51eC9hcm02NC9rdWJlY3RsCiAgLSA3ZmVjOTFhZjc4ZTk1NDhkZjMwNmYwZWM0M2JlYTUyN2M4YzEwY2MzYTk2ODJjMzNlOTcxYzg1MjJhN2ZjZGVkQGh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9rdWJlcm5ldGVzLXJlbGVhc2UvbmV0d29yay1wbHVnaW5zL2NuaS1wbHVnaW5zLWFybTY0LXYwLjcuNS50Z3oKICAtIGRlZmIyY2NjOTVjMDgyNTgzMzIxNmM4YjllMGUxNWJhYWE1MWJjZWRiM2VmYzFmMzkzZjUzNTJkMTg0ZGVhZDRAaHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3N0YXRpYy9zdGFibGUvYWFyY2g2NC9kb2NrZXItMTguMDYuMy1jZS50Z3oKQ2x1c3Rlck5hbWU6IG1pbmltYWwtdGYxMS5leGFtcGxlLmNvbQpDb25maWdCYXNlOiBtZW1mczovL2NsdXN0ZXJzLmV4YW1wbGUuY29tL21pbmltYWwtdGYxMS5leGFtcGxlLmNvbQpJbnN0YW5jZUdyb3VwTmFtZTogbm9kZXMKSW5zdGFuY2VHcm91cFJvbGU6IE5vZGUKS3ViZWxldENvbmZpZzoKICBhbm9ueW1vdXNBdXRoOiBmYWxzZQogIGNncm91cFJvb3Q6IC8KICBjbG91ZFByb3ZpZGVyOiBhd3MKICBjbHVzdGVyRE5TOiAxMDAuNjQuMC4xMAogIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICBlbmFibGVEZWJ1Z2dpbmdIYW5kbGVyczogdHJ1ZQogIGV2aWN0aW9uSGFyZDogbWVtb3J5LmF2YWlsYWJsZTwxMDBNaSxub2RlZnMuYXZhaWxhYmxlPDEwJSxub2RlZnMuaW5vZGVzRnJlZTw1JSxpbWFnZWZzLmF2YWlsYWJsZTwxMCUsaW1hZ2Vmcy5pbm9kZXNGcmVlPDUlCiAgZmVhdHVyZUdhdGVzOgogICAgRXhwZXJpbWVudGFsQ3JpdGljYWxQb2RBbm5vdGF0aW9uOiAidHJ1ZSIKICBob3N0bmFtZU92ZXJyaWRlOiAnQGF3cycKICBrdWJlY29uZmlnUGF0aDogL3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnCiAgbG9nTGV2ZWw6IDIKICBuZXR3b3JrUGx1Z2luTVRVOiA5MDAxCiAgbmV0d29ya1BsdWdpbk5hbWU6IGt1YmVuZXQKICBub2RlTGFiZWxzOgogICAga3ViZXJuZXRlcy5pby9yb2xlOiBub2RlCiAgICBub2RlLXJvbGUua3ViZXJuZXRlcy5pby9ub2RlOiAiIgogIG5vbk1hc3F1ZXJhZGVDSURSOiAxMDAuNjQuMC4wLzEwCiAgcG9kSW5mcmFDb250YWluZXJJbWFnZTogazhzLmdjci5pby9wYXVzZTozLjIKICBwb2RNYW5pZmVzdFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKY2hhbm5lbHM6Ci0gbWVtZnM6Ly9jbHVzdGVycy5leGFtcGxlLmNvbS9taW5pbWFsLXRmMTEuZXhhbXBsZS5jb20vYWRkb25zL2Jvb3RzdHJhcC1jaGFubmVsLnlhbWwKCl9fRU9GX0tVQkVfRU5WCgpkb3dubG9hZC1yZWxlYXNlCmVjaG8gIj09IG5vZGV1cCBub2RlIGNvbmZpZyBkb25lID09Igo= diff --git a/tests/integration/update_cluster/minimal/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data b/tests/integration/update_cluster/minimal/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data index 17073d4df1145..fe9cb39792a50 100644 --- a/tests/integration/update_cluster/minimal/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data +++ b/tests/integration/update_cluster/minimal/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/minimal/data/aws_launch_template_nodes.minimal.example.com_user_data b/tests/integration/update_cluster/minimal/data/aws_launch_template_nodes.minimal.example.com_user_data index 3ab3010b5edb4..2348760889773 100644 --- a/tests/integration/update_cluster/minimal/data/aws_launch_template_nodes.minimal.example.com_user_data +++ b/tests/integration/update_cluster/minimal/data/aws_launch_template_nodes.minimal.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_master-us-test1-a-minimal-gce-example-com_metadata_startup-script b/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_master-us-test1-a-minimal-gce-example-com_metadata_startup-script index edd1e1153d699..99154749beb37 100644 --- a/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_master-us-test1-a-minimal-gce-example-com_metadata_startup-script +++ b/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_master-us-test1-a-minimal-gce-example-com_metadata_startup-script @@ -286,11 +286,13 @@ Assets: - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - ae0d7b36c7f9559354ee35c14bf084a771132e32@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/mounter - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - df7fc4fe107253603d284a549cac36ae072a0dcb@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/mounter - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal-gce.example.com ConfigBase: memfs://tests/minimal-gce.example.com InstanceGroupName: master-us-test1-a diff --git a/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_nodes-minimal-gce-example-com_metadata_startup-script b/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_nodes-minimal-gce-example-com_metadata_startup-script index 94e1892405248..3e4459a80f5d1 100644 --- a/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_nodes-minimal-gce-example-com_metadata_startup-script +++ b/tests/integration/update_cluster/minimal_gce/data/google_compute_instance_template_nodes-minimal-gce-example-com_metadata_startup-script @@ -202,11 +202,13 @@ Assets: - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - ae0d7b36c7f9559354ee35c14bf084a771132e32@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/mounter - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - df7fc4fe107253603d284a549cac36ae072a0dcb@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/mounter - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal-gce.example.com ConfigBase: memfs://tests/minimal-gce.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml index ec51a09e600db..78dc43f9f2356 100644 --- a/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/mixed_instances/cloudformation.json.extracted.yaml @@ -285,10 +285,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersmixedinstancesexamplecom.Prop - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1a @@ -628,10 +630,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1bmastersmixedinstancesexamplecom.Prop - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1b @@ -971,10 +975,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1cmastersmixedinstancesexamplecom.Prop - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1c @@ -1230,10 +1236,12 @@ Resources.AWSEC2LaunchTemplatenodesmixedinstancesexamplecom.Properties.LaunchTem - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data index 7acffaa9ecf3f..c0784075a2de1 100644 --- a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data index feac949337943..e639376a8ac2d 100644 --- a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1b diff --git a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data index dcab75e23ce16..ffc0d4e2b85cc 100644 --- a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1c diff --git a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_nodes.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_nodes.mixedinstances.example.com_user_data index 3622340059253..f94b7fa9b7683 100644 --- a/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_nodes.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances/data/aws_launch_template_nodes.mixedinstances.example.com_user_data @@ -200,10 +200,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml index ec51a09e600db..78dc43f9f2356 100644 --- a/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/mixed_instances_spot/cloudformation.json.extracted.yaml @@ -285,10 +285,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersmixedinstancesexamplecom.Prop - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1a @@ -628,10 +630,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1bmastersmixedinstancesexamplecom.Prop - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1b @@ -971,10 +975,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1cmastersmixedinstancesexamplecom.Prop - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1c @@ -1230,10 +1236,12 @@ Resources.AWSEC2LaunchTemplatenodesmixedinstancesexamplecom.Properties.LaunchTem - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data index 7acffaa9ecf3f..c0784075a2de1 100644 --- a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1a.masters.mixedinstances.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data index feac949337943..e639376a8ac2d 100644 --- a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1b.masters.mixedinstances.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1b diff --git a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data index dcab75e23ce16..ffc0d4e2b85cc 100644 --- a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_master-us-test-1c.masters.mixedinstances.example.com_user_data @@ -284,10 +284,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: master-us-test-1c diff --git a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_nodes.mixedinstances.example.com_user_data b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_nodes.mixedinstances.example.com_user_data index 3622340059253..f94b7fa9b7683 100644 --- a/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_nodes.mixedinstances.example.com_user_data +++ b/tests/integration/update_cluster/mixed_instances_spot/data/aws_launch_template_nodes.mixedinstances.example.com_user_data @@ -200,10 +200,12 @@ Assets: - e914b17532c411cb7c0cc472131b61935fb66b31@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubelet - aa3e93897a6999d6c7dedbc41793c90d41eeb000@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - 412e243c45c11395395a117802cbf76b7f4ac0ed@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubelet - 0c262007ae32aeb991fbe906f106c0203140a3f7@https://storage.googleapis.com/kubernetes-release/release/v1.12.9/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: mixedinstances.example.com ConfigBase: memfs://clusters.example.com/mixedinstances.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_master-us-test-1a.masters.private-shared-subnet.example.com_user_data b/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_master-us-test-1a.masters.private-shared-subnet.example.com_user_data index 045e68d125d85..dfcc61870b181 100644 --- a/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_master-us-test-1a.masters.private-shared-subnet.example.com_user_data +++ b/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_master-us-test-1a.masters.private-shared-subnet.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: private-shared-subnet.example.com ConfigBase: memfs://clusters.example.com/private-shared-subnet.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_nodes.private-shared-subnet.example.com_user_data b/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_nodes.private-shared-subnet.example.com_user_data index 84e9c1131c1a5..98cd8f9f6a939 100644 --- a/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_nodes.private-shared-subnet.example.com_user_data +++ b/tests/integration/update_cluster/private-shared-subnet/data/aws_launch_template_nodes.private-shared-subnet.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: private-shared-subnet.example.com ConfigBase: memfs://clusters.example.com/private-shared-subnet.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecalico/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/privatecalico/cloudformation.json.extracted.yaml index 9422ef7c79013..a9afd879f4ad8 100644 --- a/tests/integration/update_cluster/privatecalico/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/privatecalico/cloudformation.json.extracted.yaml @@ -155,7 +155,6 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersprivatecalicoexamplecom.Prope configOverride: | disabled_plugins = ["cri"] logLevel: info - version: 1.3.7 docker: ipMasq: false ipTables: false @@ -279,10 +278,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersprivatecalicoexamplecom.Prope - 3a90e7abf9910aebf9ef5845918c665afd4136a8832604ccfabca2defb35ce0f@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubelet - bb16739fcad964c197752200ff89d89aad7b118cb1de5725dc53fe924c40e3f7@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - 994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz + - ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8@https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz arm64: - db91a26f8baa2bce017172305e717e77be5cfc4272592be8cb0155e1cfa7719e@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubelet - 0de307f90502cd58e5785cdcbebeb552df81fa2399190f8a662afea9e30bc74d@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - 43fbf750c5eccb10accffeeb092693c32b236fb25d919cf058c91a677822c999@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-arm64-v0.8.6.tgz + - bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec@https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz ClusterName: privatecalico.example.com ConfigBase: memfs://clusters.example.com/privatecalico.example.com InstanceGroupName: master-us-test-1a @@ -490,7 +491,6 @@ Resources.AWSEC2LaunchTemplatenodesprivatecalicoexamplecom.Properties.LaunchTemp configOverride: | disabled_plugins = ["cri"] logLevel: info - version: 1.3.7 docker: ipMasq: false ipTables: false @@ -536,10 +536,12 @@ Resources.AWSEC2LaunchTemplatenodesprivatecalicoexamplecom.Properties.LaunchTemp - 3a90e7abf9910aebf9ef5845918c665afd4136a8832604ccfabca2defb35ce0f@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubelet - bb16739fcad964c197752200ff89d89aad7b118cb1de5725dc53fe924c40e3f7@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - 994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz + - ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8@https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz arm64: - db91a26f8baa2bce017172305e717e77be5cfc4272592be8cb0155e1cfa7719e@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubelet - 0de307f90502cd58e5785cdcbebeb552df81fa2399190f8a662afea9e30bc74d@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - 43fbf750c5eccb10accffeeb092693c32b236fb25d919cf058c91a677822c999@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-arm64-v0.8.6.tgz + - bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec@https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz ClusterName: privatecalico.example.com ConfigBase: memfs://clusters.example.com/privatecalico.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecalico/data/aws_launch_template_master-us-test-1a.masters.privatecalico.example.com_user_data b/tests/integration/update_cluster/privatecalico/data/aws_launch_template_master-us-test-1a.masters.privatecalico.example.com_user_data index 32105a1dc214b..8096f6305512a 100644 --- a/tests/integration/update_cluster/privatecalico/data/aws_launch_template_master-us-test-1a.masters.privatecalico.example.com_user_data +++ b/tests/integration/update_cluster/privatecalico/data/aws_launch_template_master-us-test-1a.masters.privatecalico.example.com_user_data @@ -153,7 +153,6 @@ containerd: configOverride: | disabled_plugins = ["cri"] logLevel: info - version: 1.3.7 docker: ipMasq: false ipTables: false @@ -277,10 +276,12 @@ Assets: - 3a90e7abf9910aebf9ef5845918c665afd4136a8832604ccfabca2defb35ce0f@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubelet - bb16739fcad964c197752200ff89d89aad7b118cb1de5725dc53fe924c40e3f7@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - 994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz + - ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8@https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz arm64: - db91a26f8baa2bce017172305e717e77be5cfc4272592be8cb0155e1cfa7719e@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubelet - 0de307f90502cd58e5785cdcbebeb552df81fa2399190f8a662afea9e30bc74d@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - 43fbf750c5eccb10accffeeb092693c32b236fb25d919cf058c91a677822c999@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-arm64-v0.8.6.tgz + - bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec@https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz ClusterName: privatecalico.example.com ConfigBase: memfs://clusters.example.com/privatecalico.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatecalico/data/aws_launch_template_nodes.privatecalico.example.com_user_data b/tests/integration/update_cluster/privatecalico/data/aws_launch_template_nodes.privatecalico.example.com_user_data index 8fd9a16613a23..0f8ef9d6595b1 100644 --- a/tests/integration/update_cluster/privatecalico/data/aws_launch_template_nodes.privatecalico.example.com_user_data +++ b/tests/integration/update_cluster/privatecalico/data/aws_launch_template_nodes.privatecalico.example.com_user_data @@ -153,7 +153,6 @@ containerd: configOverride: | disabled_plugins = ["cri"] logLevel: info - version: 1.3.7 docker: ipMasq: false ipTables: false @@ -199,10 +198,12 @@ Assets: - 3a90e7abf9910aebf9ef5845918c665afd4136a8832604ccfabca2defb35ce0f@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubelet - bb16739fcad964c197752200ff89d89aad7b118cb1de5725dc53fe924c40e3f7@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl - 994fbfcdbb2eedcfa87e48d8edb9bb365f4e2747a7e47658482556c12fd9b2f5@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz + - ddb13aff1fcdcceb710bf71a210169b9c1abfd7420eeaf42cf7975f8fae2fcc8@https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz arm64: - db91a26f8baa2bce017172305e717e77be5cfc4272592be8cb0155e1cfa7719e@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubelet - 0de307f90502cd58e5785cdcbebeb552df81fa2399190f8a662afea9e30bc74d@https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/arm64/kubectl - 43fbf750c5eccb10accffeeb092693c32b236fb25d919cf058c91a677822c999@https://storage.googleapis.com/k8s-artifacts-cni/release/v0.8.6/cni-plugins-linux-arm64-v0.8.6.tgz + - bdf080af7d6f383ad80e415e9c1952a63c7038c149dc673b7598bfca4d3311ec@https://download.docker.com/linux/static/stable/aarch64/docker-19.03.13.tgz ClusterName: privatecalico.example.com ConfigBase: memfs://clusters.example.com/privatecalico.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecanal/data/aws_launch_template_master-us-test-1a.masters.privatecanal.example.com_user_data b/tests/integration/update_cluster/privatecanal/data/aws_launch_template_master-us-test-1a.masters.privatecanal.example.com_user_data index d73825182198b..ee24dac558537 100644 --- a/tests/integration/update_cluster/privatecanal/data/aws_launch_template_master-us-test-1a.masters.privatecanal.example.com_user_data +++ b/tests/integration/update_cluster/privatecanal/data/aws_launch_template_master-us-test-1a.masters.privatecanal.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecanal.example.com ConfigBase: memfs://clusters.example.com/privatecanal.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatecanal/data/aws_launch_template_nodes.privatecanal.example.com_user_data b/tests/integration/update_cluster/privatecanal/data/aws_launch_template_nodes.privatecanal.example.com_user_data index b970636a588a2..6bf6e4cda276d 100644 --- a/tests/integration/update_cluster/privatecanal/data/aws_launch_template_nodes.privatecanal.example.com_user_data +++ b/tests/integration/update_cluster/privatecanal/data/aws_launch_template_nodes.privatecanal.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecanal.example.com ConfigBase: memfs://clusters.example.com/privatecanal.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecilium/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/privatecilium/cloudformation.json.extracted.yaml index ec7252ddc005e..fa229ebdefdad 100644 --- a/tests/integration/update_cluster/privatecilium/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/privatecilium/cloudformation.json.extracted.yaml @@ -282,10 +282,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersprivateciliumexamplecom.Prope - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: master-us-test-1a @@ -537,10 +539,12 @@ Resources.AWSEC2LaunchTemplatenodesprivateciliumexamplecom.Properties.LaunchTemp - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecilium/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data b/tests/integration/update_cluster/privatecilium/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data index 3a084f569970f..b7c7bed5aab63 100644 --- a/tests/integration/update_cluster/privatecilium/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data +++ b/tests/integration/update_cluster/privatecilium/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatecilium/data/aws_launch_template_nodes.privatecilium.example.com_user_data b/tests/integration/update_cluster/privatecilium/data/aws_launch_template_nodes.privatecilium.example.com_user_data index d6f4f8aaf535c..56630d4173477 100644 --- a/tests/integration/update_cluster/privatecilium/data/aws_launch_template_nodes.privatecilium.example.com_user_data +++ b/tests/integration/update_cluster/privatecilium/data/aws_launch_template_nodes.privatecilium.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecilium2/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/privatecilium2/cloudformation.json.extracted.yaml index ec7252ddc005e..fa229ebdefdad 100644 --- a/tests/integration/update_cluster/privatecilium2/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/privatecilium2/cloudformation.json.extracted.yaml @@ -282,10 +282,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersprivateciliumexamplecom.Prope - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: master-us-test-1a @@ -537,10 +539,12 @@ Resources.AWSEC2LaunchTemplatenodesprivateciliumexamplecom.Properties.LaunchTemp - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data b/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data index 3a084f569970f..b7c7bed5aab63 100644 --- a/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data +++ b/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_master-us-test-1a.masters.privatecilium.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_nodes.privatecilium.example.com_user_data b/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_nodes.privatecilium.example.com_user_data index d6f4f8aaf535c..56630d4173477 100644 --- a/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_nodes.privatecilium.example.com_user_data +++ b/tests/integration/update_cluster/privatecilium2/data/aws_launch_template_nodes.privatecilium.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatecilium.example.com ConfigBase: memfs://clusters.example.com/privatecilium.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privateciliumadvanced/cloudformation.json.extracted.yaml b/tests/integration/update_cluster/privateciliumadvanced/cloudformation.json.extracted.yaml index cbd57a4751b43..071af19bc30e0 100644 --- a/tests/integration/update_cluster/privateciliumadvanced/cloudformation.json.extracted.yaml +++ b/tests/integration/update_cluster/privateciliumadvanced/cloudformation.json.extracted.yaml @@ -285,10 +285,12 @@ Resources.AWSEC2LaunchTemplatemasterustest1amastersprivateciliumadvancedexamplec - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateciliumadvanced.example.com ConfigBase: memfs://clusters.example.com/privateciliumadvanced.example.com InstanceGroupName: master-us-test-1a @@ -542,10 +544,12 @@ Resources.AWSEC2LaunchTemplatenodesprivateciliumadvancedexamplecom.Properties.La - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateciliumadvanced.example.com ConfigBase: memfs://clusters.example.com/privateciliumadvanced.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_master-us-test-1a.masters.privateciliumadvanced.example.com_user_data b/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_master-us-test-1a.masters.privateciliumadvanced.example.com_user_data index 4a71c16ebc9a5..8aa3bf03bab9f 100644 --- a/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_master-us-test-1a.masters.privateciliumadvanced.example.com_user_data +++ b/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_master-us-test-1a.masters.privateciliumadvanced.example.com_user_data @@ -283,10 +283,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateciliumadvanced.example.com ConfigBase: memfs://clusters.example.com/privateciliumadvanced.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_nodes.privateciliumadvanced.example.com_user_data b/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_nodes.privateciliumadvanced.example.com_user_data index 94e0e51d2572e..15cc881d5caa8 100644 --- a/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_nodes.privateciliumadvanced.example.com_user_data +++ b/tests/integration/update_cluster/privateciliumadvanced/data/aws_launch_template_nodes.privateciliumadvanced.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateciliumadvanced.example.com ConfigBase: memfs://clusters.example.com/privateciliumadvanced.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatedns1/data/aws_launch_template_master-us-test-1a.masters.privatedns1.example.com_user_data b/tests/integration/update_cluster/privatedns1/data/aws_launch_template_master-us-test-1a.masters.privatedns1.example.com_user_data index 7f4444f22e10c..7dafae2f64e0e 100644 --- a/tests/integration/update_cluster/privatedns1/data/aws_launch_template_master-us-test-1a.masters.privatedns1.example.com_user_data +++ b/tests/integration/update_cluster/privatedns1/data/aws_launch_template_master-us-test-1a.masters.privatedns1.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatedns1.example.com ConfigBase: memfs://clusters.example.com/privatedns1.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatedns1/data/aws_launch_template_nodes.privatedns1.example.com_user_data b/tests/integration/update_cluster/privatedns1/data/aws_launch_template_nodes.privatedns1.example.com_user_data index 9cb8a1e7ed070..a1ffe5cf45ae6 100644 --- a/tests/integration/update_cluster/privatedns1/data/aws_launch_template_nodes.privatedns1.example.com_user_data +++ b/tests/integration/update_cluster/privatedns1/data/aws_launch_template_nodes.privatedns1.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatedns1.example.com ConfigBase: memfs://clusters.example.com/privatedns1.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatedns2/data/aws_launch_template_master-us-test-1a.masters.privatedns2.example.com_user_data b/tests/integration/update_cluster/privatedns2/data/aws_launch_template_master-us-test-1a.masters.privatedns2.example.com_user_data index bd1c30b8c9cf2..d8820d5772152 100644 --- a/tests/integration/update_cluster/privatedns2/data/aws_launch_template_master-us-test-1a.masters.privatedns2.example.com_user_data +++ b/tests/integration/update_cluster/privatedns2/data/aws_launch_template_master-us-test-1a.masters.privatedns2.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatedns2.example.com ConfigBase: memfs://clusters.example.com/privatedns2.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatedns2/data/aws_launch_template_nodes.privatedns2.example.com_user_data b/tests/integration/update_cluster/privatedns2/data/aws_launch_template_nodes.privatedns2.example.com_user_data index dcf1aba8e8414..dd89a8ac43df0 100644 --- a/tests/integration/update_cluster/privatedns2/data/aws_launch_template_nodes.privatedns2.example.com_user_data +++ b/tests/integration/update_cluster/privatedns2/data/aws_launch_template_nodes.privatedns2.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatedns2.example.com ConfigBase: memfs://clusters.example.com/privatedns2.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privateflannel/data/aws_launch_template_master-us-test-1a.masters.privateflannel.example.com_user_data b/tests/integration/update_cluster/privateflannel/data/aws_launch_template_master-us-test-1a.masters.privateflannel.example.com_user_data index 802eaa8d86b32..e2cb258716528 100644 --- a/tests/integration/update_cluster/privateflannel/data/aws_launch_template_master-us-test-1a.masters.privateflannel.example.com_user_data +++ b/tests/integration/update_cluster/privateflannel/data/aws_launch_template_master-us-test-1a.masters.privateflannel.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateflannel.example.com ConfigBase: memfs://clusters.example.com/privateflannel.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privateflannel/data/aws_launch_template_nodes.privateflannel.example.com_user_data b/tests/integration/update_cluster/privateflannel/data/aws_launch_template_nodes.privateflannel.example.com_user_data index 3a417baaa8b3f..63845a94a8c4c 100644 --- a/tests/integration/update_cluster/privateflannel/data/aws_launch_template_nodes.privateflannel.example.com_user_data +++ b/tests/integration/update_cluster/privateflannel/data/aws_launch_template_nodes.privateflannel.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateflannel.example.com ConfigBase: memfs://clusters.example.com/privateflannel.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_master-us-test-1a.masters.privatekopeio.example.com_user_data b/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_master-us-test-1a.masters.privatekopeio.example.com_user_data index 13968bf3682b3..1413ceb04f452 100644 --- a/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_master-us-test-1a.masters.privatekopeio.example.com_user_data +++ b/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_master-us-test-1a.masters.privatekopeio.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatekopeio.example.com ConfigBase: memfs://clusters.example.com/privatekopeio.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_nodes.privatekopeio.example.com_user_data b/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_nodes.privatekopeio.example.com_user_data index 99104161f9f75..c8df3c2be1240 100644 --- a/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_nodes.privatekopeio.example.com_user_data +++ b/tests/integration/update_cluster/privatekopeio/data/aws_launch_template_nodes.privatekopeio.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privatekopeio.example.com ConfigBase: memfs://clusters.example.com/privatekopeio.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/privateweave/data/aws_launch_template_master-us-test-1a.masters.privateweave.example.com_user_data b/tests/integration/update_cluster/privateweave/data/aws_launch_template_master-us-test-1a.masters.privateweave.example.com_user_data index 28bffe58d6a37..0f4941f7a65d5 100644 --- a/tests/integration/update_cluster/privateweave/data/aws_launch_template_master-us-test-1a.masters.privateweave.example.com_user_data +++ b/tests/integration/update_cluster/privateweave/data/aws_launch_template_master-us-test-1a.masters.privateweave.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateweave.example.com ConfigBase: memfs://clusters.example.com/privateweave.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/privateweave/data/aws_launch_template_nodes.privateweave.example.com_user_data b/tests/integration/update_cluster/privateweave/data/aws_launch_template_nodes.privateweave.example.com_user_data index c5dcb80d20da8..001801b7d4e5b 100644 --- a/tests/integration/update_cluster/privateweave/data/aws_launch_template_nodes.privateweave.example.com_user_data +++ b/tests/integration/update_cluster/privateweave/data/aws_launch_template_nodes.privateweave.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: privateweave.example.com ConfigBase: memfs://clusters.example.com/privateweave.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/public-jwks/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data b/tests/integration/update_cluster/public-jwks/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data index 40b2257ba17ff..a166c08feaf74 100644 --- a/tests/integration/update_cluster/public-jwks/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data +++ b/tests/integration/update_cluster/public-jwks/data/aws_launch_template_master-us-test-1a.masters.minimal.example.com_user_data @@ -288,10 +288,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/public-jwks/data/aws_launch_template_nodes.minimal.example.com_user_data b/tests/integration/update_cluster/public-jwks/data/aws_launch_template_nodes.minimal.example.com_user_data index 3ab3010b5edb4..2348760889773 100644 --- a/tests/integration/update_cluster/public-jwks/data/aws_launch_template_nodes.minimal.example.com_user_data +++ b/tests/integration/update_cluster/public-jwks/data/aws_launch_template_nodes.minimal.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: minimal.example.com ConfigBase: memfs://clusters.example.com/minimal.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_master-us-test-1a.masters.sharedsubnet.example.com_user_data b/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_master-us-test-1a.masters.sharedsubnet.example.com_user_data index 269543c9b421d..8df1723f1c91f 100644 --- a/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_master-us-test-1a.masters.sharedsubnet.example.com_user_data +++ b/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_master-us-test-1a.masters.sharedsubnet.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: sharedsubnet.example.com ConfigBase: memfs://clusters.example.com/sharedsubnet.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_nodes.sharedsubnet.example.com_user_data b/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_nodes.sharedsubnet.example.com_user_data index 3926edd2eb6f3..b294e90ce5329 100644 --- a/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_nodes.sharedsubnet.example.com_user_data +++ b/tests/integration/update_cluster/shared_subnet/data/aws_launch_template_nodes.sharedsubnet.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: sharedsubnet.example.com ConfigBase: memfs://clusters.example.com/sharedsubnet.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_master-us-test-1a.masters.sharedvpc.example.com_user_data b/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_master-us-test-1a.masters.sharedvpc.example.com_user_data index 424981b6926d6..1a69d05e8c762 100644 --- a/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_master-us-test-1a.masters.sharedvpc.example.com_user_data +++ b/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_master-us-test-1a.masters.sharedvpc.example.com_user_data @@ -282,10 +282,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: sharedvpc.example.com ConfigBase: memfs://clusters.example.com/sharedvpc.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_nodes.sharedvpc.example.com_user_data b/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_nodes.sharedvpc.example.com_user_data index 6c0580702594e..d486908cf7447 100644 --- a/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_nodes.sharedvpc.example.com_user_data +++ b/tests/integration/update_cluster/shared_vpc/data/aws_launch_template_nodes.sharedvpc.example.com_user_data @@ -199,10 +199,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: sharedvpc.example.com ConfigBase: memfs://clusters.example.com/sharedvpc.example.com InstanceGroupName: nodes diff --git a/tests/integration/update_cluster/unmanaged/data/aws_launch_template_master-us-test-1a.masters.unmanaged.example.com_user_data b/tests/integration/update_cluster/unmanaged/data/aws_launch_template_master-us-test-1a.masters.unmanaged.example.com_user_data index 7d8844378ed2e..36f1da2d9cb96 100644 --- a/tests/integration/update_cluster/unmanaged/data/aws_launch_template_master-us-test-1a.masters.unmanaged.example.com_user_data +++ b/tests/integration/update_cluster/unmanaged/data/aws_launch_template_master-us-test-1a.masters.unmanaged.example.com_user_data @@ -280,10 +280,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: unmanaged.example.com ConfigBase: memfs://clusters.example.com/unmanaged.example.com InstanceGroupName: master-us-test-1a diff --git a/tests/integration/update_cluster/unmanaged/data/aws_launch_template_nodes.unmanaged.example.com_user_data b/tests/integration/update_cluster/unmanaged/data/aws_launch_template_nodes.unmanaged.example.com_user_data index 1e5e54fb99381..f390de693d373 100644 --- a/tests/integration/update_cluster/unmanaged/data/aws_launch_template_nodes.unmanaged.example.com_user_data +++ b/tests/integration/update_cluster/unmanaged/data/aws_launch_template_nodes.unmanaged.example.com_user_data @@ -198,10 +198,12 @@ Assets: - c3b736fd0f003765c12d99f2c995a8369e6241f4@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubelet - 7e3a3ea663153f900cbd52900a39c91fa9f334be@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl - 3ca15c0a18ee830520cf3a95408be826cbd255a1535a38e0be9608b25ad8bf64@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-amd64-v0.7.5.tgz + - 346f9394393ee8db5f8bd1e229ee9d90e5b36931bdd754308b2ae68884dd6822@https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz arm64: - df38e04576026393055ccc77c0dce73612996561@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubelet - 01c2b6b43d36b6bfafc80a3737391c19ebfb8ad5@https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/arm64/kubectl - 7fec91af78e9548df306f0ec43bea527c8c10cc3a9682c33e971c8522a7fcded@https://storage.googleapis.com/kubernetes-release/network-plugins/cni-plugins-arm64-v0.7.5.tgz + - defb2ccc95c0825833216c8b9e0e15baaa51bcedb3efc1f393f5352d184dead4@https://download.docker.com/linux/static/stable/aarch64/docker-18.06.3-ce.tgz ClusterName: unmanaged.example.com ConfigBase: memfs://clusters.example.com/unmanaged.example.com InstanceGroupName: nodes From c36262009b2bb8d2c1fdf02f128233b55c11efa2 Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Fri, 23 Oct 2020 08:02:41 +0300 Subject: [PATCH 5/5] Install container runtime packages as assets - Code Review 1 --- nodeup/pkg/model/containerd.go | 5 ++- nodeup/pkg/model/context.go | 22 +++++----- nodeup/pkg/model/docker.go | 36 ++++++++++------ nodeup/pkg/model/docker_test.go | 43 +++++++++++++++---- .../dockerbuilder/docker_18.06.3/tasks.yaml | 39 +++++++++-------- .../dockerbuilder/healthcheck/tasks.yaml | 39 +++++++++-------- .../tests/dockerbuilder/logflags/tasks.yaml | 39 +++++++++-------- .../tests/dockerbuilder/simple/tasks.yaml | 39 +++++++++-------- pkg/apis/kops/validation/validation.go | 2 +- upup/pkg/fi/assetstore.go | 22 +++++++++- upup/pkg/fi/cloudup/apply_cluster.go | 4 +- upup/pkg/fi/cloudup/containerd.go | 6 ++- upup/pkg/fi/cloudup/containerd_test.go | 14 +++--- upup/pkg/fi/cloudup/docker.go | 2 +- 14 files changed, 190 insertions(+), 122 deletions(-) diff --git a/nodeup/pkg/model/containerd.go b/nodeup/pkg/model/containerd.go index 5f40c02ae043b..9612214d0b276 100644 --- a/nodeup/pkg/model/containerd.go +++ b/nodeup/pkg/model/containerd.go @@ -99,12 +99,13 @@ func (b *ContainerdBuilder) Build(c *fi.ModelBuilderContext) error { return fmt.Errorf("unable to find any containerd binaries in assets") } for k, v := range f { - c.AddTask(&nodetasks.File{ + fileTask := &nodetasks.File{ Path: filepath.Join("/usr/bin", k), Contents: v, Type: nodetasks.FileType_File, Mode: fi.String("0755"), - }) + } + c.AddTask(fileTask) } } diff --git a/nodeup/pkg/model/context.go b/nodeup/pkg/model/context.go index e3b5f4cf391ca..8bb55182b4fe0 100644 --- a/nodeup/pkg/model/context.go +++ b/nodeup/pkg/model/context.go @@ -599,7 +599,7 @@ func (c *NodeupModelContext) GetPrivateKey(name string) ([]byte, error) { func (b *NodeupModelContext) AddCNIBinAssets(c *fi.ModelBuilderContext, assetNames []string) error { for _, assetName := range assetNames { - re, err := regexp.Compile(fmt.Sprintf("^%s$", assetName)) + re, err := regexp.Compile(fmt.Sprintf("^%s$", regexp.QuoteMeta(assetName))) if err != nil { return err } @@ -611,19 +611,17 @@ func (b *NodeupModelContext) AddCNIBinAssets(c *fi.ModelBuilderContext, assetNam } func (b *NodeupModelContext) addCNIBinAsset(c *fi.ModelBuilderContext, assetPath *regexp.Regexp) error { - a := b.Assets.FindMatches(assetPath) - if len(a) != 1 { - return fmt.Errorf("unable to locate asset %q", assetPath.String()) + name, res, err := b.Assets.FindMatch(assetPath) + if err != nil { + return err } - for k, v := range a { - c.AddTask(&nodetasks.File{ - Path: filepath.Join(b.CNIBinDir(), k), - Contents: v, - Type: nodetasks.FileType_File, - Mode: fi.String("0755"), - }) - } + c.AddTask(&nodetasks.File{ + Path: filepath.Join(b.CNIBinDir(), name), + Contents: res, + Type: nodetasks.FileType_File, + Mode: fi.String("0755"), + }) return nil } diff --git a/nodeup/pkg/model/docker.go b/nodeup/pkg/model/docker.go index 3be2c51a7dd76..52696f08f7a01 100644 --- a/nodeup/pkg/model/docker.go +++ b/nodeup/pkg/model/docker.go @@ -79,6 +79,15 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error { return nil } + dockerVersion, err := b.dockerVersion() + if err != nil { + return err + } + sv, err := semver.ParseTolerant(dockerVersion) + if err != nil { + return fmt.Errorf("error parsing docker version %q: %v", dockerVersion, err) + } + c.AddTask(b.buildDockerGroup()) c.AddTask(b.buildSystemdSocket()) @@ -89,13 +98,23 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error { return fmt.Errorf("unable to find any Docker binaries in assets") } for k, v := range f { - klog.V(4).Infof("Found matching Docker asset: %q", k) - c.AddTask(&nodetasks.File{ + fileTask := &nodetasks.File{ Path: filepath.Join("/usr/bin", k), Contents: v, Type: nodetasks.FileType_File, Mode: fi.String("0755"), - }) + } + c.AddTask(fileTask) + + // As a mitigation for CVE-2019-5736 we chattr docker-runc to be immutable + // https://github.com/kubernetes/kops/blob/master/docs/advisories/cve_2019_5736.md + if strings.HasSuffix(k, "runc") && sv.LT(semver.MustParse("18.9.2")) { + c.AddTask(&nodetasks.Chattr{ + File: filepath.Join("/usr/bin", k), + Mode: "+i", + Deps: []fi.Task{fileTask}, + }) + } } } @@ -109,16 +128,7 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error { c.AddTask(t) } - dockerVersion, err := b.dockerVersion() - if err != nil { - return err - } - - v, err := semver.ParseTolerant(dockerVersion) - if err != nil { - return fmt.Errorf("error parsing docker version %q: %v", dockerVersion, err) - } - c.AddTask(b.buildSystemdService(v)) + c.AddTask(b.buildSystemdService(sv)) if err := b.buildSysconfig(c); err != nil { return err diff --git a/nodeup/pkg/model/docker_test.go b/nodeup/pkg/model/docker_test.go index 6b1d192ce2b77..8f0c8d225196e 100644 --- a/nodeup/pkg/model/docker_test.go +++ b/nodeup/pkg/model/docker_test.go @@ -21,6 +21,8 @@ import ( "path/filepath" "testing" + "github.com/blang/semver/v4" + "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/flagbuilder" "k8s.io/kops/pkg/testutils" @@ -120,15 +122,38 @@ func runDockerBuilderTest(t *testing.T, key string) { nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 - nodeUpModelContext.Assets = fi.NewAssetStore("") - nodeUpModelContext.Assets.AddForTest("containerd", "docker/containerd", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("containerd-shim", "docker/containerd-shim", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("ctr", "docker/ctr", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("docker", "docker/docker", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("docker-init", "docker/docker-init", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("docker-proxy", "docker/docker-proxy", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("dockerd", "docker/dockerd", "testing Docker content") - nodeUpModelContext.Assets.AddForTest("runc", "docker/runc", "testing Docker content") + if nodeUpModelContext.Cluster.Spec.Docker.SkipInstall == false { + if nodeUpModelContext.Cluster == nil || nodeUpModelContext.Cluster.Spec.Docker == nil || nodeUpModelContext.Cluster.Spec.Docker.Version == nil { + t.Fatalf("error finding Docker version") + return + } + dv := fi.StringValue(nodeUpModelContext.Cluster.Spec.Docker.Version) + sv, err := semver.ParseTolerant(dv) + if err != nil { + t.Fatalf("error parsing Docker version %q: %v", dv, err) + return + } + nodeUpModelContext.Assets = fi.NewAssetStore("") + if sv.GTE(semver.MustParse("19.3.0")) { + nodeUpModelContext.Assets.AddForTest("containerd", "docker/containerd", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("containerd-shim", "docker/containerd-shim", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("ctr", "docker/ctr", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker", "docker/docker", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-init", "docker/docker-init", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-proxy", "docker/docker-proxy", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("dockerd", "docker/dockerd", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("runc", "docker/runc", "testing Docker content") + } else { + nodeUpModelContext.Assets.AddForTest("docker", "docker/docker", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-containerd", "docker/docker-containerd", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-containerd-ctr", "docker/docker-containerd-ctr", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-containerd-shim", "docker/docker-containerd-shim", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-init", "docker/docker-init", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-proxy", "docker/docker-proxy", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("docker-runc", "docker/docker-runc", "testing Docker content") + nodeUpModelContext.Assets.AddForTest("dockerd", "docker/dockerd", "testing Docker content") + } + } context := &fi.ModelBuilderContext{ Tasks: make(map[string]fi.Task), diff --git a/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml index 7d593dabc6a24..ade0854131a19 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/docker_18.06.3/tasks.yaml @@ -1,3 +1,6 @@ +file: /usr/bin/docker-runc +mode: +i +--- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -74,34 +77,34 @@ type: file --- contents: Asset: - AssetPath: docker/containerd - Key: containerd + AssetPath: docker/docker + Key: docker mode: "0755" -path: /usr/bin/containerd +path: /usr/bin/docker type: file --- contents: Asset: - AssetPath: docker/containerd-shim - Key: containerd-shim + AssetPath: docker/docker-containerd + Key: docker-containerd mode: "0755" -path: /usr/bin/containerd-shim +path: /usr/bin/docker-containerd type: file --- contents: Asset: - AssetPath: docker/ctr - Key: ctr + AssetPath: docker/docker-containerd-ctr + Key: docker-containerd-ctr mode: "0755" -path: /usr/bin/ctr +path: /usr/bin/docker-containerd-ctr type: file --- contents: Asset: - AssetPath: docker/docker - Key: docker + AssetPath: docker/docker-containerd-shim + Key: docker-containerd-shim mode: "0755" -path: /usr/bin/docker +path: /usr/bin/docker-containerd-shim type: file --- contents: @@ -122,18 +125,18 @@ type: file --- contents: Asset: - AssetPath: docker/dockerd - Key: dockerd + AssetPath: docker/docker-runc + Key: docker-runc mode: "0755" -path: /usr/bin/dockerd +path: /usr/bin/docker-runc type: file --- contents: Asset: - AssetPath: docker/runc - Key: runc + AssetPath: docker/dockerd + Key: dockerd mode: "0755" -path: /usr/bin/runc +path: /usr/bin/dockerd type: file --- contents: |2 diff --git a/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml index 7d593dabc6a24..ade0854131a19 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/healthcheck/tasks.yaml @@ -1,3 +1,6 @@ +file: /usr/bin/docker-runc +mode: +i +--- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -74,34 +77,34 @@ type: file --- contents: Asset: - AssetPath: docker/containerd - Key: containerd + AssetPath: docker/docker + Key: docker mode: "0755" -path: /usr/bin/containerd +path: /usr/bin/docker type: file --- contents: Asset: - AssetPath: docker/containerd-shim - Key: containerd-shim + AssetPath: docker/docker-containerd + Key: docker-containerd mode: "0755" -path: /usr/bin/containerd-shim +path: /usr/bin/docker-containerd type: file --- contents: Asset: - AssetPath: docker/ctr - Key: ctr + AssetPath: docker/docker-containerd-ctr + Key: docker-containerd-ctr mode: "0755" -path: /usr/bin/ctr +path: /usr/bin/docker-containerd-ctr type: file --- contents: Asset: - AssetPath: docker/docker - Key: docker + AssetPath: docker/docker-containerd-shim + Key: docker-containerd-shim mode: "0755" -path: /usr/bin/docker +path: /usr/bin/docker-containerd-shim type: file --- contents: @@ -122,18 +125,18 @@ type: file --- contents: Asset: - AssetPath: docker/dockerd - Key: dockerd + AssetPath: docker/docker-runc + Key: docker-runc mode: "0755" -path: /usr/bin/dockerd +path: /usr/bin/docker-runc type: file --- contents: Asset: - AssetPath: docker/runc - Key: runc + AssetPath: docker/dockerd + Key: dockerd mode: "0755" -path: /usr/bin/runc +path: /usr/bin/dockerd type: file --- contents: |2 diff --git a/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml index 7d593dabc6a24..ade0854131a19 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/logflags/tasks.yaml @@ -1,3 +1,6 @@ +file: /usr/bin/docker-runc +mode: +i +--- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -74,34 +77,34 @@ type: file --- contents: Asset: - AssetPath: docker/containerd - Key: containerd + AssetPath: docker/docker + Key: docker mode: "0755" -path: /usr/bin/containerd +path: /usr/bin/docker type: file --- contents: Asset: - AssetPath: docker/containerd-shim - Key: containerd-shim + AssetPath: docker/docker-containerd + Key: docker-containerd mode: "0755" -path: /usr/bin/containerd-shim +path: /usr/bin/docker-containerd type: file --- contents: Asset: - AssetPath: docker/ctr - Key: ctr + AssetPath: docker/docker-containerd-ctr + Key: docker-containerd-ctr mode: "0755" -path: /usr/bin/ctr +path: /usr/bin/docker-containerd-ctr type: file --- contents: Asset: - AssetPath: docker/docker - Key: docker + AssetPath: docker/docker-containerd-shim + Key: docker-containerd-shim mode: "0755" -path: /usr/bin/docker +path: /usr/bin/docker-containerd-shim type: file --- contents: @@ -122,18 +125,18 @@ type: file --- contents: Asset: - AssetPath: docker/dockerd - Key: dockerd + AssetPath: docker/docker-runc + Key: docker-runc mode: "0755" -path: /usr/bin/dockerd +path: /usr/bin/docker-runc type: file --- contents: Asset: - AssetPath: docker/runc - Key: runc + AssetPath: docker/dockerd + Key: dockerd mode: "0755" -path: /usr/bin/runc +path: /usr/bin/dockerd type: file --- contents: |2 diff --git a/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml b/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml index 7d593dabc6a24..ade0854131a19 100644 --- a/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml +++ b/nodeup/pkg/model/tests/dockerbuilder/simple/tasks.yaml @@ -1,3 +1,6 @@ +file: /usr/bin/docker-runc +mode: +i +--- contents: |- DOCKER_OPTS= DOCKER_NOFILE=1000000 @@ -74,34 +77,34 @@ type: file --- contents: Asset: - AssetPath: docker/containerd - Key: containerd + AssetPath: docker/docker + Key: docker mode: "0755" -path: /usr/bin/containerd +path: /usr/bin/docker type: file --- contents: Asset: - AssetPath: docker/containerd-shim - Key: containerd-shim + AssetPath: docker/docker-containerd + Key: docker-containerd mode: "0755" -path: /usr/bin/containerd-shim +path: /usr/bin/docker-containerd type: file --- contents: Asset: - AssetPath: docker/ctr - Key: ctr + AssetPath: docker/docker-containerd-ctr + Key: docker-containerd-ctr mode: "0755" -path: /usr/bin/ctr +path: /usr/bin/docker-containerd-ctr type: file --- contents: Asset: - AssetPath: docker/docker - Key: docker + AssetPath: docker/docker-containerd-shim + Key: docker-containerd-shim mode: "0755" -path: /usr/bin/docker +path: /usr/bin/docker-containerd-shim type: file --- contents: @@ -122,18 +125,18 @@ type: file --- contents: Asset: - AssetPath: docker/dockerd - Key: dockerd + AssetPath: docker/docker-runc + Key: docker-runc mode: "0755" -path: /usr/bin/dockerd +path: /usr/bin/docker-runc type: file --- contents: Asset: - AssetPath: docker/runc - Key: runc + AssetPath: docker/dockerd + Key: dockerd mode: "0755" -path: /usr/bin/runc +path: /usr/bin/dockerd type: file --- contents: |2 diff --git a/pkg/apis/kops/validation/validation.go b/pkg/apis/kops/validation/validation.go index c258388aafa31..52c52da8c7bae 100644 --- a/pkg/apis/kops/validation/validation.go +++ b/pkg/apis/kops/validation/validation.go @@ -1068,7 +1068,7 @@ func validateContainerdConfig(config *kops.ContainerdConfig, fldPath *field.Path allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, fmt.Sprintf("unable to parse version string: %s", err.Error()))) } - if sv.LT(semver.MustParse("1.2.6")) { + if sv.LT(semver.MustParse("1.2.4")) { allErrs = append(allErrs, field.Invalid(fldPath.Child("version"), config.Version, "unsupported legacy version")) } } diff --git a/upup/pkg/fi/assetstore.go b/upup/pkg/fi/assetstore.go index e46e777a05bc6..fa2fc246d5e68 100644 --- a/upup/pkg/fi/assetstore.go +++ b/upup/pkg/fi/assetstore.go @@ -103,7 +103,7 @@ func NewAssetStore(cacheDir string) *AssetStore { func (a *AssetStore) FindMatches(expr *regexp.Regexp) map[string]Resource { matches := make(map[string]Resource) - klog.Infof("Matching assets:") + klog.Infof("Matching assets for %q:", expr.String()) for _, a := range a.assets { if expr.MatchString(a.AssetPath) { klog.Infof(" %s", a.AssetPath) @@ -114,6 +114,26 @@ func (a *AssetStore) FindMatches(expr *regexp.Regexp) map[string]Resource { return matches } +func (a *AssetStore) FindMatch(expr *regexp.Regexp) (name string, res Resource, err error) { + matches := a.FindMatches(expr) + + switch len(matches) { + case 0: + return "", nil, fmt.Errorf("found no matching assets for expr: %q", expr.String()) + case 1: + var n string + var r Resource + for k, v := range matches { + klog.Infof("Found single matching asset for expr %q: %q", expr.String(), k) + n = k + r = v + } + return n, r, nil + default: + return "", nil, fmt.Errorf("found multiple matching assets for expr: %q", expr.String()) + } +} + func (a *AssetStore) Find(key string, assetPath string) (Resource, error) { var matches []*asset for _, asset := range a.assets { diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go index 779b08f804094..76c1e92e4c1f7 100644 --- a/upup/pkg/fi/cloudup/apply_cluster.go +++ b/upup/pkg/fi/cloudup/apply_cluster.go @@ -1100,9 +1100,9 @@ func (c *ApplyClusterCmd) addFileAssets(assetBuilder *assets.AssetBuilder) error var containerRuntimeAssetHash *hashing.Hash switch c.Cluster.Spec.ContainerRuntime { case "docker": - containerRuntimeAssetUrl, containerRuntimeAssetHash, err = findDockerAssets(c.Cluster, assetBuilder, arch) + containerRuntimeAssetUrl, containerRuntimeAssetHash, err = findDockerAsset(c.Cluster, assetBuilder, arch) case "containerd": - containerRuntimeAssetUrl, containerRuntimeAssetHash, err = findContainerdAssets(c.Cluster, assetBuilder, arch) + containerRuntimeAssetUrl, containerRuntimeAssetHash, err = findContainerdAsset(c.Cluster, assetBuilder, arch) default: err = fmt.Errorf("unknown container runtime: %q", c.Cluster.Spec.ContainerRuntime) } diff --git a/upup/pkg/fi/cloudup/containerd.go b/upup/pkg/fi/cloudup/containerd.go index 6147246b2eed3..4e9b8769df652 100644 --- a/upup/pkg/fi/cloudup/containerd.go +++ b/upup/pkg/fi/cloudup/containerd.go @@ -38,7 +38,7 @@ const ( containerdFallbackVersion = "1.2.13" ) -func findContainerdAssets(c *kops.Cluster, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*url.URL, *hashing.Hash, error) { +func findContainerdAsset(c *kops.Cluster, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*url.URL, *hashing.Hash, error) { if c.Spec.Containerd == nil || fi.StringValue(c.Spec.Containerd.Version) == "" { return nil, nil, fmt.Errorf("unable to find containerd version") } @@ -162,10 +162,12 @@ func findAllContainerdHashesAmd64() map[string]string { func findAllContainerdDockerMappings() map[string]string { versions := map[string]string{ + "1.2.4": "18.09.3", + "1.2.5": "18.09.4", "1.2.6": "19.03.2", "1.2.10": "19.03.5", "1.2.12": "19.03.6", - "1.2.13": "19.03.12", + "1.2.13": "19.03.11", "1.3.7": "19.03.13", } diff --git a/upup/pkg/fi/cloudup/containerd_test.go b/upup/pkg/fi/cloudup/containerd_test.go index d0f4e5c092df8..ec77e49a53bf1 100644 --- a/upup/pkg/fi/cloudup/containerd_test.go +++ b/upup/pkg/fi/cloudup/containerd_test.go @@ -43,8 +43,8 @@ func TestContainerdVersionUrlHash(t *testing.T) { { arch: architectures.ArchitectureArm64, version: "1.3.4", - url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", - hash: "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.11.tgz", + hash: "9cd49fe82f6b7ec413b04daef35bc0c87b01d6da67611e5beef36291538d3145", err: nil, }, { @@ -71,8 +71,8 @@ func TestContainerdVersionUrlHash(t *testing.T) { { arch: architectures.ArchitectureArm64, version: "1.4.1", - url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", - hash: "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.11.tgz", + hash: "9cd49fe82f6b7ec413b04daef35bc0c87b01d6da67611e5beef36291538d3145", err: nil, }, } @@ -159,7 +159,7 @@ func TestContainerdVersionUrl(t *testing.T) { { arch: architectures.ArchitectureArm64, version: "1.3.4", - url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.11.tgz", err: nil, }, { @@ -171,7 +171,7 @@ func TestContainerdVersionUrl(t *testing.T) { { arch: architectures.ArchitectureArm64, version: "1.4.1", - url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.12.tgz", + url: "https://download.docker.com/linux/static/stable/aarch64/docker-19.03.11.tgz", err: nil, }, } @@ -254,7 +254,7 @@ func TestContainerdVersionHash(t *testing.T) { { arch: architectures.ArchitectureArm64, version: "1.4.1", - hash: "bc7810d58e32360652abfddc9cb43405feee4ed9592aedc1132fb35eede9fa9e", + hash: "9cd49fe82f6b7ec413b04daef35bc0c87b01d6da67611e5beef36291538d3145", err: nil, }, } diff --git a/upup/pkg/fi/cloudup/docker.go b/upup/pkg/fi/cloudup/docker.go index 7d3eaafd80f40..a5f55e5f414d6 100644 --- a/upup/pkg/fi/cloudup/docker.go +++ b/upup/pkg/fi/cloudup/docker.go @@ -41,7 +41,7 @@ const ( dockerFallbackVersion = "17.09.0" ) -func findDockerAssets(c *kops.Cluster, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*url.URL, *hashing.Hash, error) { +func findDockerAsset(c *kops.Cluster, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*url.URL, *hashing.Hash, error) { if c.Spec.Docker == nil || fi.StringValue(c.Spec.Docker.Version) == "" { return nil, nil, fmt.Errorf("unable to find Docker version") }