diff --git a/hack/.packages b/hack/.packages index baaa194f36..31c779cebc 100644 --- a/hack/.packages +++ b/hack/.packages @@ -47,7 +47,6 @@ k8s.io/kops/node-authorizer/pkg/client k8s.io/kops/node-authorizer/pkg/server k8s.io/kops/node-authorizer/pkg/utils k8s.io/kops/nodeup/pkg/bootstrap -k8s.io/kops/nodeup/pkg/distros k8s.io/kops/nodeup/pkg/model k8s.io/kops/nodeup/pkg/model/networking k8s.io/kops/nodeup/pkg/model/resources @@ -192,6 +191,7 @@ k8s.io/kops/upup/pkg/fi/utils k8s.io/kops/upup/pkg/kutil k8s.io/kops/upup/tools/generators/fitask k8s.io/kops/util/pkg/architectures +k8s.io/kops/util/pkg/distributions k8s.io/kops/util/pkg/env k8s.io/kops/util/pkg/exec k8s.io/kops/util/pkg/hashing diff --git a/nodeup/pkg/bootstrap/BUILD.bazel b/nodeup/pkg/bootstrap/BUILD.bazel index 71a1022d42..0dc4784413 100644 --- a/nodeup/pkg/bootstrap/BUILD.bazel +++ b/nodeup/pkg/bootstrap/BUILD.bazel @@ -6,11 +6,11 @@ go_library( importpath = "k8s.io/kops/nodeup/pkg/bootstrap", visibility = ["//visibility:public"], deps = [ - "//nodeup/pkg/distros:go_default_library", "//pkg/systemd:go_default_library", "//upup/pkg/fi:go_default_library", "//upup/pkg/fi/nodeup/local:go_default_library", "//upup/pkg/fi/nodeup/nodetasks:go_default_library", + "//util/pkg/distributions:go_default_library", "//util/pkg/vfs:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", ], diff --git a/nodeup/pkg/bootstrap/install.go b/nodeup/pkg/bootstrap/install.go index c2067842a8..316729e894 100644 --- a/nodeup/pkg/bootstrap/install.go +++ b/nodeup/pkg/bootstrap/install.go @@ -23,11 +23,11 @@ import ( "strings" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/systemd" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/local" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" "k8s.io/kops/util/pkg/vfs" ) @@ -38,7 +38,7 @@ type Installation struct { } func (i *Installation) Run() error { - _, err := distros.FindDistribution("/") + _, err := distributions.FindDistribution("/") if err != nil { return fmt.Errorf("error determining OS distribution: %v", err) } diff --git a/nodeup/pkg/distros/BUILD.bazel b/nodeup/pkg/distros/BUILD.bazel deleted file mode 100644 index ac2cbad2e8..0000000000 --- a/nodeup/pkg/distros/BUILD.bazel +++ /dev/null @@ -1,12 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "go_default_library", - srcs = [ - "distribution.go", - "identify.go", - ], - importpath = "k8s.io/kops/nodeup/pkg/distros", - visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/klog/v2:go_default_library"], -) diff --git a/nodeup/pkg/distros/identify.go b/nodeup/pkg/distros/identify.go deleted file mode 100644 index 7510a18121..0000000000 --- a/nodeup/pkg/distros/identify.go +++ /dev/null @@ -1,131 +0,0 @@ -/* -Copyright 2019 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 distros - -import ( - "fmt" - "io/ioutil" - "os" - "path" - "strings" - - "k8s.io/klog/v2" -) - -// FindDistribution identifies the distribution on which we are running -// We will likely remove this when everything is containerized -func FindDistribution(rootfs string) (Distribution, error) { - // Ubuntu has /etc/lsb-release (and /etc/debian_version) - lsbRelease, err := ioutil.ReadFile(path.Join(rootfs, "etc/lsb-release")) - if err == nil { - for _, line := range strings.Split(string(lsbRelease), "\n") { - line = strings.TrimSpace(line) - if line == "DISTRIB_CODENAME=xenial" { - return DistributionXenial, nil - } else if line == "DISTRIB_CODENAME=bionic" { - return DistributionBionic, nil - } else if line == "DISTRIB_CODENAME=focal" { - return DistributionFocal, nil - } - } - } else if !os.IsNotExist(err) { - klog.Warningf("error reading /etc/lsb-release: %v", err) - } - - // Debian has /etc/debian_version - debianVersionBytes, err := ioutil.ReadFile(path.Join(rootfs, "etc/debian_version")) - if err == nil { - debianVersion := strings.TrimSpace(string(debianVersionBytes)) - if strings.HasPrefix(debianVersion, "8.") { - return "", fmt.Errorf("distribution Degian 8 (Jessie) is no longer supported") - } else if strings.HasPrefix(debianVersion, "9.") { - return DistributionDebian9, nil - } else if strings.HasPrefix(debianVersion, "10.") { - return DistributionDebian10, nil - } else { - return "", fmt.Errorf("unhandled debian version %q", debianVersion) - } - } else if !os.IsNotExist(err) { - klog.Warningf("error reading /etc/debian_version: %v", err) - } - - // Redhat has /etc/redhat-release - // Centos has /etc/centos-release - redhatRelease, err := ioutil.ReadFile(path.Join(rootfs, "etc/redhat-release")) - if err == nil { - for _, line := range strings.Split(string(redhatRelease), "\n") { - line = strings.TrimSpace(line) - if strings.HasPrefix(line, "Red Hat Enterprise Linux Server release 7.") { - return DistributionRhel7, nil - } - if strings.HasPrefix(line, "CentOS Linux release 7.") { - return DistributionCentos7, nil - } - if strings.HasPrefix(line, "Red Hat Enterprise Linux release 8.") { - return DistributionRhel8, nil - } - if strings.HasPrefix(line, "CentOS Linux release 8.") { - return DistributionCentos8, nil - } - } - klog.Warningf("unhandled redhat-release info %q", string(lsbRelease)) - } else if !os.IsNotExist(err) { - klog.Warningf("error reading /etc/redhat-release: %v", err) - } - - // Flatcar uses /usr/lib/os-release - usrLibOsRelease, err := ioutil.ReadFile(path.Join(rootfs, "usr/lib/os-release")) - if err == nil { - for _, line := range strings.Split(string(usrLibOsRelease), "\n") { - line = strings.TrimSpace(line) - if line == "ID=coreos" { - return "", fmt.Errorf("distribution CoreOS is no longer supported") - } else if line == "ID=flatcar" { - return DistributionFlatcar, nil - } - } - klog.Warningf("unhandled os-release info %q", string(usrLibOsRelease)) - } else if !os.IsNotExist(err) { - klog.Warningf("error reading /usr/lib/os-release: %v", err) - } - - // ContainerOS, Amazon Linux 2 uses /etc/os-release - osRelease, err := ioutil.ReadFile(path.Join(rootfs, "etc/os-release")) - if err == nil { - for _, line := range strings.Split(string(osRelease), "\n") { - line = strings.TrimSpace(line) - if line == "ID=cos" { - return DistributionContainerOS, nil - } - if strings.HasPrefix(line, "PRETTY_NAME=\"Amazon Linux 2") { - return DistributionAmazonLinux2, nil - } - } - klog.Warningf("unhandled /etc/os-release info %q", string(osRelease)) - } else if !os.IsNotExist(err) { - klog.Warningf("error reading /etc/os-release: %v", err) - } - - klog.Warningf("could not determine distro") - klog.Warningf(" /etc/lsb-release: %q", string(lsbRelease)) - klog.Warningf(" /etc/debian_version: %q", string(debianVersionBytes)) - klog.Warningf(" /etc/redhat-release: %q", string(redhatRelease)) - klog.Warningf(" /usr/lib/os-release: %q", string(usrLibOsRelease)) - klog.Warningf(" /etc/os-release: %q", string(osRelease)) - - return "", fmt.Errorf("cannot identify distro") -} diff --git a/nodeup/pkg/model/BUILD.bazel b/nodeup/pkg/model/BUILD.bazel index 92fb999489..2d3af9a752 100644 --- a/nodeup/pkg/model/BUILD.bazel +++ b/nodeup/pkg/model/BUILD.bazel @@ -40,7 +40,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//:go_default_library", - "//nodeup/pkg/distros:go_default_library", "//nodeup/pkg/model/resources:go_default_library", "//pkg/apis/kops:go_default_library", "//pkg/apis/kops/model:go_default_library", @@ -64,6 +63,7 @@ go_library( "//upup/pkg/fi/cloudup/awsup:go_default_library", "//upup/pkg/fi/nodeup/nodetasks:go_default_library", "//util/pkg/architectures:go_default_library", + "//util/pkg/distributions:go_default_library", "//util/pkg/exec:go_default_library", "//util/pkg/proxy:go_default_library", "//util/pkg/vfs:go_default_library", @@ -102,7 +102,6 @@ go_test( data = glob(["tests/**"]), #keep embed = [":go_default_library"], deps = [ - "//nodeup/pkg/distros:go_default_library", "//pkg/apis/kops:go_default_library", "//pkg/apis/nodeup:go_default_library", "//pkg/assets:go_default_library", @@ -115,6 +114,7 @@ go_test( "//upup/pkg/fi/cloudup:go_default_library", "//upup/pkg/fi/nodeup/nodetasks:go_default_library", "//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", diff --git a/nodeup/pkg/model/containerd.go b/nodeup/pkg/model/containerd.go index c85e367d0e..07448a9839 100644 --- a/nodeup/pkg/model/containerd.go +++ b/nodeup/pkg/model/containerd.go @@ -21,7 +21,6 @@ import ( "strings" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/nodeup/pkg/model/resources" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/flagbuilder" @@ -30,6 +29,7 @@ import ( "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" ) // ContainerdBuilder install containerd (just the packages at the moment) @@ -44,7 +44,7 @@ var containerdVersions = []packageVersion{ { PackageVersion: "1.2.4", Name: "containerd.io", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -128,14 +128,14 @@ func (b *ContainerdBuilder) Build(c *fi.ModelBuilderContext) error { // @check: neither flatcar nor containeros need provision containerd.service, just the containerd daemon options switch b.Distribution { - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: klog.Infof("Detected Flatcar; won't install containerd") if err := b.buildContainerOSConfigurationDropIn(c); err != nil { return err } return nil - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: klog.Infof("Detected ContainerOS; won't install containerd") if err := b.buildContainerOSConfigurationDropIn(c); err != nil { return err diff --git a/nodeup/pkg/model/containerd_test.go b/nodeup/pkg/model/containerd_test.go index ddf3d9da5d..8d10a5395b 100644 --- a/nodeup/pkg/model/containerd_test.go +++ b/nodeup/pkg/model/containerd_test.go @@ -22,11 +22,11 @@ import ( "path/filepath" "testing" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/flagbuilder" "k8s.io/kops/pkg/testutils" "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/util/pkg/distributions" ) func TestContainerdPackageNames(t *testing.T) { @@ -154,7 +154,7 @@ func runContainerdBuilderTest(t *testing.T, key string) { basedir := path.Join("tests/containerdbuilder/", key) nodeUpModelContext, err := BuildNodeupModelContext(basedir) - nodeUpModelContext.Distribution = distros.DistributionXenial + nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 if err != nil { t.Fatalf("error parsing cluster yaml %q: %v", basedir, err) return diff --git a/nodeup/pkg/model/context.go b/nodeup/pkg/model/context.go index 9f36a35fae..f47964a40f 100644 --- a/nodeup/pkg/model/context.go +++ b/nodeup/pkg/model/context.go @@ -23,7 +23,6 @@ import ( "strings" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/apis/kops/model" "k8s.io/kops/pkg/apis/kops/util" @@ -32,6 +31,7 @@ import ( "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" "k8s.io/kops/util/pkg/vfs" "k8s.io/utils/mount" @@ -47,7 +47,7 @@ type NodeupModelContext struct { Assets *fi.AssetStore Cluster *kops.Cluster ConfigBase vfs.Path - Distribution distros.Distribution + Distribution distributions.Distribution InstanceGroup *kops.InstanceGroup KeyStore fi.CAStore NodeupConfig *nodeup.Config @@ -81,11 +81,11 @@ func (c *NodeupModelContext) SSLHostPaths() []string { paths := []string{"/etc/ssl", "/etc/pki/tls", "/etc/pki/ca-trust"} switch c.Distribution { - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: // Because /usr is read-only on Flatcar, we can't have any new directories; docker will try (and fail) to create them // TODO: Just check if the directories exist? paths = append(paths, "/usr/share/ca-certificates") - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: paths = append(paths, "/usr/share/ca-certificates") default: paths = append(paths, "/usr/share/ssl", "/usr/ssl", "/usr/lib/ssl", "/usr/local/openssl", "/var/ssl", "/etc/openssl") @@ -149,7 +149,7 @@ func (c *NodeupModelContext) IsMounted(m mount.Interface, device, path string) ( // PathSrvKubernetes returns the path for the kubernetes service files func (c *NodeupModelContext) PathSrvKubernetes() string { switch c.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: return "/etc/srv/kubernetes" default: return "/srv/kubernetes" @@ -164,7 +164,7 @@ func (c *NodeupModelContext) FileAssetsDefaultPath() string { // PathSrvSshproxy returns the path for the SSH proxy func (c *NodeupModelContext) PathSrvSshproxy() string { switch c.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: return "/etc/srv/sshproxy" default: return "/srv/sshproxy" @@ -404,10 +404,10 @@ func (c *NodeupModelContext) UseSecureKubelet() bool { // KubectlPath returns distro based path for kubectl func (c *NodeupModelContext) KubectlPath() string { kubeletCommand := "/usr/local/bin" - if c.Distribution == distros.DistributionFlatcar { + if c.Distribution == distributions.DistributionFlatcar { kubeletCommand = "/opt/bin" } - if c.Distribution == distros.DistributionContainerOS { + if c.Distribution == distributions.DistributionContainerOS { kubeletCommand = "/home/kubernetes/bin" } return kubeletCommand diff --git a/nodeup/pkg/model/convenience.go b/nodeup/pkg/model/convenience.go index ef2c7d888b..e423176d22 100644 --- a/nodeup/pkg/model/convenience.go +++ b/nodeup/pkg/model/convenience.go @@ -21,10 +21,10 @@ import ( "sort" "strconv" - "k8s.io/kops/nodeup/pkg/distros" "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" @@ -140,7 +140,7 @@ type packageVersion struct { ExtraPackages map[string]packageInfo PackageVersion string - Distros []distros.Distribution + 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 @@ -156,7 +156,7 @@ type packageVersion struct { } // Match package version against configured values -func (d *packageVersion) matches(arch architectures.Architecture, packageVersion string, distro distros.Distribution) bool { +func (d *packageVersion) matches(arch architectures.Architecture, packageVersion string, distro distributions.Distribution) bool { if d.PackageVersion != packageVersion { return false } diff --git a/nodeup/pkg/model/directories.go b/nodeup/pkg/model/directories.go index c939c800f5..38c3afab66 100644 --- a/nodeup/pkg/model/directories.go +++ b/nodeup/pkg/model/directories.go @@ -19,9 +19,9 @@ package model import ( "path/filepath" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" ) // DirectoryBuilder creates required directories @@ -33,7 +33,7 @@ var _ fi.ModelBuilder = &DirectoryBuilder{} // Build is responsible for specific directories are created - os dependent func (b *DirectoryBuilder) Build(c *fi.ModelBuilderContext) error { - if b.Distribution == distros.DistributionContainerOS { + if b.Distribution == distributions.DistributionContainerOS { dirname := "/home/kubernetes/bin" c.AddTask(&nodetasks.File{ @@ -51,7 +51,7 @@ func (b *DirectoryBuilder) Build(c *fi.ModelBuilderContext) error { // We try to put things into /opt/kops // On some OSes though, /opt/ is not writeable, and we can't even create the mountpoint - if b.Distribution == distros.DistributionContainerOS { + if b.Distribution == distributions.DistributionContainerOS { src := "/mnt/stateful_partition/opt/" c.AddTask(&nodetasks.File{ diff --git a/nodeup/pkg/model/docker.go b/nodeup/pkg/model/docker.go index 35f40ce28b..f676fac6bf 100644 --- a/nodeup/pkg/model/docker.go +++ b/nodeup/pkg/model/docker.go @@ -26,7 +26,6 @@ import ( "github.com/blang/semver/v4" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/nodeup/pkg/model/resources" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/flagbuilder" @@ -34,6 +33,7 @@ import ( "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" ) // DockerBuilder install docker (just the packages at the moment) @@ -50,7 +50,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.03.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -62,7 +62,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.03.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionXenial}, + 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", @@ -74,7 +74,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.03.2", PlainBinary: true, - Distros: []distros.Distribution{distros.DistributionBionic}, + 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", @@ -85,7 +85,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.03.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7, distros.DistributionAmazonLinux2}, + 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", @@ -105,7 +105,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.09.0", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -116,7 +116,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.09.0", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionXenial}, + 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", @@ -127,7 +127,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionXenial}, + 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", @@ -138,7 +138,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "17.09.0", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7, distros.DistributionAmazonLinux2}, + 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", @@ -149,7 +149,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.03.1", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionBionic}, + 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", @@ -160,7 +160,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionBionic}, + 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", @@ -171,7 +171,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.1", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -183,7 +183,7 @@ var dockerVersions = []packageVersion{ PackageVersion: "18.06.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -194,7 +194,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.1", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7, distros.DistributionAmazonLinux2}, + 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", @@ -205,7 +205,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.09.3", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -223,7 +223,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.2", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7, distros.DistributionAmazonLinux2}, + 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", @@ -236,7 +236,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.3", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionXenial}, + 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", @@ -247,9 +247,9 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.3", Name: "docker-ce", - Distros: []distros.Distribution{ - distros.DistributionBionic, - distros.DistributionFocal, + Distros: []distributions.Distribution{ + distributions.DistributionUbuntu1804, + distributions.DistributionUbuntu2004, }, Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, Version: "18.06.3~ce~3-0~ubuntu", @@ -261,7 +261,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.3", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian9}, + 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", @@ -272,7 +272,7 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.3", Name: "docker-ce", - Distros: []distros.Distribution{distros.DistributionDebian10}, + 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", @@ -283,12 +283,12 @@ var dockerVersions = []packageVersion{ { PackageVersion: "18.06.3", Name: "docker-ce", - Distros: []distros.Distribution{ - distros.DistributionAmazonLinux2, - distros.DistributionCentos7, - distros.DistributionCentos8, - distros.DistributionRhel7, - distros.DistributionRhel8, + Distros: []distributions.Distribution{ + distributions.DistributionAmazonLinux2, + distributions.DistributionCentos7, + distributions.DistributionCentos8, + distributions.DistributionRhel7, + distributions.DistributionRhel8, }, Architectures: []architectures.Architecture{architectures.ArchitectureAmd64}, Version: "18.06.3.ce", @@ -381,14 +381,14 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error { // @check: neither flatcar nor containeros need provision docker.service, just the docker daemon options switch b.Distribution { - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: klog.Infof("Detected Flatcar; won't install Docker") if err := b.buildContainerOSConfigurationDropIn(c); err != nil { return err } return nil - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: klog.Infof("Detected ContainerOS; won't install Docker") if err := b.buildContainerOSConfigurationDropIn(c); err != nil { return err @@ -708,7 +708,7 @@ func (b *DockerBuilder) buildSysconfig(c *fi.ModelBuilderContext) error { } // ContainerOS now sets the storage flag in /etc/docker/daemon.json, and it is an error to set it twice - if b.Distribution == distros.DistributionContainerOS { + if b.Distribution == distributions.DistributionContainerOS { // So that we can support older COS images though, we do check for /etc/docker/daemon.json if b, err := ioutil.ReadFile("/etc/docker/daemon.json"); err != nil { if os.IsNotExist(err) { diff --git a/nodeup/pkg/model/docker_test.go b/nodeup/pkg/model/docker_test.go index 8c9ce66e8b..4e7bebd8bd 100644 --- a/nodeup/pkg/model/docker_test.go +++ b/nodeup/pkg/model/docker_test.go @@ -25,11 +25,11 @@ import ( "strings" "testing" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/flagbuilder" "k8s.io/kops/pkg/testutils" "k8s.io/kops/upup/pkg/fi" + "k8s.io/kops/util/pkg/distributions" "k8s.io/kops/util/pkg/hashing" ) @@ -250,7 +250,7 @@ func runDockerBuilderTest(t *testing.T, key string) { basedir := path.Join("tests/dockerbuilder/", key) nodeUpModelContext, err := BuildNodeupModelContext(basedir) - nodeUpModelContext.Distribution = distros.DistributionXenial + nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604 if err != nil { t.Fatalf("error parsing cluster yaml %q: %v", basedir, err) return diff --git a/nodeup/pkg/model/etcd.go b/nodeup/pkg/model/etcd.go index d6d0d3bf0d..8b830b7b91 100644 --- a/nodeup/pkg/model/etcd.go +++ b/nodeup/pkg/model/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package model import ( - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/wellknownusers" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" "k8s.io/klog/v2" ) @@ -39,11 +39,11 @@ func (b *EtcdBuilder) Build(c *fi.ModelBuilderContext) error { } switch b.Distribution { - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: klog.Infof("Detected Flatcar; skipping etcd user installation") return nil - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: klog.Infof("Detected ContainerOS; skipping etcd user installation") return nil } diff --git a/nodeup/pkg/model/kube_controller_manager.go b/nodeup/pkg/model/kube_controller_manager.go index d61b327471..a7312cef6b 100644 --- a/nodeup/pkg/model/kube_controller_manager.go +++ b/nodeup/pkg/model/kube_controller_manager.go @@ -21,7 +21,6 @@ import ( "path/filepath" "strings" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/flagbuilder" "k8s.io/kops/pkg/k8scodecs" "k8s.io/kops/pkg/kubemanifest" @@ -29,6 +28,7 @@ import ( "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" "k8s.io/kops/util/pkg/exec" "k8s.io/kops/util/pkg/proxy" @@ -146,11 +146,11 @@ func (b *KubeControllerManagerBuilder) buildPod() (*v1.Pod, error) { // Ensure the Volume Plugin dir is mounted on the same path as the host machine so DaemonSet deployment is possible if volumePluginDir == "" { switch b.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: // Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171 volumePluginDir = "/home/kubernetes/flexvolume/" - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: // The /usr directory is read-only for Flatcar volumePluginDir = "/var/lib/kubelet/volumeplugins/" diff --git a/nodeup/pkg/model/kubectl.go b/nodeup/pkg/model/kubectl.go index 63a0c88d58..cadec02381 100644 --- a/nodeup/pkg/model/kubectl.go +++ b/nodeup/pkg/model/kubectl.go @@ -19,10 +19,10 @@ package model import ( "fmt" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/rbac" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" "k8s.io/klog/v2" ) @@ -106,15 +106,15 @@ func (b *KubectlBuilder) Build(c *fi.ModelBuilderContext) error { func (b *KubectlBuilder) findKubeconfigUser() (*fi.User, *fi.Group, error) { var users []string switch b.Distribution { - case distros.DistributionDebian9, distros.DistributionDebian10: + case distributions.DistributionDebian9, distributions.DistributionDebian10: users = []string{"admin", "root"} - case distros.DistributionXenial, distros.DistributionBionic, distros.DistributionFocal: + case distributions.DistributionUbuntu1604, distributions.DistributionUbuntu1804, distributions.DistributionUbuntu2004: users = []string{"ubuntu"} - case distros.DistributionCentos7, distros.DistributionCentos8: + case distributions.DistributionCentos7, distributions.DistributionCentos8: users = []string{"centos"} - case distros.DistributionAmazonLinux2, distros.DistributionRhel7, distros.DistributionRhel8: + case distributions.DistributionAmazonLinux2, distributions.DistributionRhel7, distributions.DistributionRhel8: users = []string{"ec2-user"} - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: users = []string{"core"} default: klog.Warningf("Unknown distro; won't write kubeconfig to homedir %s", b.Distribution) diff --git a/nodeup/pkg/model/kubelet.go b/nodeup/pkg/model/kubelet.go index 4da336a277..d2de7e055b 100644 --- a/nodeup/pkg/model/kubelet.go +++ b/nodeup/pkg/model/kubelet.go @@ -28,7 +28,6 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/flagbuilder" "k8s.io/kops/pkg/nodelabels" @@ -37,6 +36,7 @@ import ( "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/awsup" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" ) const ( @@ -145,10 +145,10 @@ func (b *KubeletBuilder) Build(c *fi.ModelBuilderContext) error { // kubeletPath returns the path of the kubelet based on distro func (b *KubeletBuilder) kubeletPath() string { kubeletCommand := "/usr/local/bin/kubelet" - if b.Distribution == distros.DistributionFlatcar { + if b.Distribution == distributions.DistributionFlatcar { kubeletCommand = "/opt/kubernetes/bin/kubelet" } - if b.Distribution == distros.DistributionContainerOS { + if b.Distribution == distributions.DistributionContainerOS { kubeletCommand = "/home/kubernetes/bin/kubelet" } return kubeletCommand @@ -299,7 +299,7 @@ func (b *KubeletBuilder) buildKubeletConfig() (*kops.KubeletConfigSpec, error) { // usesContainerizedMounter returns true if we use the containerized mounter func (b *KubeletBuilder) usesContainerizedMounter() bool { switch b.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: return true default: return false @@ -482,11 +482,11 @@ func (b *KubeletBuilder) buildKubeletConfigSpec() (*kops.KubeletConfigSpec, erro if c.VolumePluginDirectory == "" { switch b.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: // Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171 c.VolumePluginDirectory = "/home/kubernetes/flexvolume/" - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: // The /usr directory is read-only for Flatcar c.VolumePluginDirectory = "/var/lib/kubelet/volumeplugins/" @@ -498,7 +498,7 @@ func (b *KubeletBuilder) buildKubeletConfigSpec() (*kops.KubeletConfigSpec, erro // In certain configurations systemd-resolved will put the loopback address 127.0.0.53 as a nameserver into /etc/resolv.conf // https://github.com/coredns/coredns/blob/master/plugin/loop/README.md#troubleshooting-loops-in-kubernetes-clusters if c.ResolverConfig == nil { - if b.Distribution == distros.DistributionBionic || b.Distribution == distros.DistributionFocal { + if b.Distribution == distributions.DistributionUbuntu1804 || b.Distribution == distributions.DistributionUbuntu2004 { c.ResolverConfig = s("/run/systemd/resolve/resolv.conf") } } diff --git a/nodeup/pkg/model/logrotate.go b/nodeup/pkg/model/logrotate.go index 129efbd9df..7f36706a47 100644 --- a/nodeup/pkg/model/logrotate.go +++ b/nodeup/pkg/model/logrotate.go @@ -20,11 +20,11 @@ import ( "fmt" "strings" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops/util" "k8s.io/kops/pkg/systemd" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" "k8s.io/klog/v2" ) @@ -40,10 +40,10 @@ var _ fi.ModelBuilder = &LogrotateBuilder{} func (b *LogrotateBuilder) Build(c *fi.ModelBuilderContext) error { switch b.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: klog.Infof("Detected ContainerOS; won't install logrotate") return nil - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: klog.Infof("Detected Flatcar; won't install logrotate") default: c.AddTask(&nodetasks.Package{Name: "logrotate"}) @@ -90,7 +90,7 @@ func (b *LogrotateBuilder) Build(c *fi.ModelBuilderContext) error { // addLogrotateService creates a logrotate systemd task to act as target for the timer, if one is needed func (b *LogrotateBuilder) addLogrotateService(c *fi.ModelBuilderContext) error { switch b.Distribution { - case distros.DistributionFlatcar, distros.DistributionContainerOS: + case distributions.DistributionFlatcar, distributions.DistributionContainerOS: // logrotate service already exists return nil } @@ -121,7 +121,7 @@ func (b *LogrotateBuilder) addLogRotate(c *fi.ModelBuilderContext, name, path st // Flatcar sets "dateext" options, and maxsize-based rotation will fail if // the file has been previously rotated on the same calendar date. - if b.Distribution == distros.DistributionFlatcar { + if b.Distribution == distributions.DistributionFlatcar { options.DateFormat = "-%Y%m%d-%s" } diff --git a/nodeup/pkg/model/miscutils.go b/nodeup/pkg/model/miscutils.go index c6cdf28471..aedbbbfba5 100644 --- a/nodeup/pkg/model/miscutils.go +++ b/nodeup/pkg/model/miscutils.go @@ -18,9 +18,9 @@ package model import ( "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" ) // MiscUtilsBuilder ensures that some system packages that are @@ -34,10 +34,10 @@ var _ fi.ModelBuilder = &MiscUtilsBuilder{} // Build is responsible for configuring the miscellaneous packages we want installed func (b *MiscUtilsBuilder) Build(c *fi.ModelBuilderContext) error { switch b.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: klog.V(2).Infof("Detected ContainerOS; won't install misc. utils") return nil - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: klog.V(2).Infof("Detected Flatcar; won't install misc. utils") return nil } diff --git a/nodeup/pkg/model/ntp.go b/nodeup/pkg/model/ntp.go index 2abdd85e75..df773f685c 100644 --- a/nodeup/pkg/model/ntp.go +++ b/nodeup/pkg/model/ntp.go @@ -18,9 +18,9 @@ package model import ( "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" ) // NTPBuilder installs and starts NTP, to ensure accurate clock times. @@ -35,10 +35,10 @@ var _ fi.ModelBuilder = &NTPBuilder{} // Build is responsible for configuring NTP func (b *NTPBuilder) Build(c *fi.ModelBuilderContext) error { switch b.Distribution { - case distros.DistributionContainerOS: + case distributions.DistributionContainerOS: klog.Infof("Detected ContainerOS; won't install ntp") return nil - case distros.DistributionFlatcar: + case distributions.DistributionFlatcar: klog.Infof("Detected Flatcar; won't install ntp") return nil } diff --git a/nodeup/pkg/model/packages.go b/nodeup/pkg/model/packages.go index e8c59b23d8..2f3c08d8a2 100644 --- a/nodeup/pkg/model/packages.go +++ b/nodeup/pkg/model/packages.go @@ -17,9 +17,9 @@ limitations under the License. package model import ( - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" "k8s.io/klog/v2" ) @@ -64,14 +64,14 @@ func (b *PackagesBuilder) Build(c *fi.ModelBuilderContext) error { c.AddTask(&nodetasks.Package{Name: "util-linux"}) // Handle some packages differently for each distro switch b.Distribution { - case distros.DistributionRhel7: + case distributions.DistributionRhel7: // Easier to install container-selinux from CentOS than extras c.AddTask(&nodetasks.Package{ Name: "container-selinux", Source: s("http://vault.centos.org/7.6.1810/extras/x86_64/Packages/container-selinux-2.107-1.el7_6.noarch.rpm"), Hash: s("7de4211fa0dfd240d8827b93763e1eb5f0d56411"), }) - case distros.DistributionAmazonLinux2: + case distributions.DistributionAmazonLinux2: // Amazon Linux 2 doesn't have SELinux enabled by default default: c.AddTask(&nodetasks.Package{Name: "container-selinux"}) diff --git a/nodeup/pkg/model/sysctls.go b/nodeup/pkg/model/sysctls.go index 2d853f830d..8e3ed7976e 100644 --- a/nodeup/pkg/model/sysctls.go +++ b/nodeup/pkg/model/sysctls.go @@ -20,10 +20,10 @@ import ( "fmt" "strings" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" ) // SysctlBuilder set up our sysctls @@ -125,7 +125,7 @@ func (b *SysctlBuilder) Build(c *fi.ModelBuilderContext) error { proxyMode = "iptables" } - if proxyMode == "iptables" && (b.Distribution == distros.DistributionCentos7 || b.Distribution == distros.DistributionRhel7) { + if proxyMode == "iptables" && (b.Distribution == distributions.DistributionCentos7 || b.Distribution == distributions.DistributionRhel7) { sysctls = append(sysctls, "# Flannel settings on CentOS 7", "# Issue https://github.com/coreos/flannel/issues/902", diff --git a/nodeup/pkg/model/update_service.go b/nodeup/pkg/model/update_service.go index 8d204be2d4..ae249fd6b8 100644 --- a/nodeup/pkg/model/update_service.go +++ b/nodeup/pkg/model/update_service.go @@ -17,11 +17,11 @@ limitations under the License. package model import ( - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/systemd" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" + "k8s.io/kops/util/pkg/distributions" "k8s.io/klog/v2" ) @@ -39,7 +39,7 @@ var _ fi.ModelBuilder = &UpdateServiceBuilder{} // Build is responsible for configuring automatic updates based on the OS. func (b *UpdateServiceBuilder) Build(c *fi.ModelBuilderContext) error { - if b.Distribution == distros.DistributionFlatcar { + if b.Distribution == distributions.DistributionFlatcar { b.buildFlatcarSystemdService(c) } else if b.Distribution.IsDebianFamily() { b.buildDebianPackage(c) diff --git a/upup/pkg/fi/nodeup/BUILD.bazel b/upup/pkg/fi/nodeup/BUILD.bazel index d832e625aa..f560747563 100644 --- a/upup/pkg/fi/nodeup/BUILD.bazel +++ b/upup/pkg/fi/nodeup/BUILD.bazel @@ -9,7 +9,6 @@ go_library( importpath = "k8s.io/kops/upup/pkg/fi/nodeup", visibility = ["//visibility:public"], deps = [ - "//nodeup/pkg/distros:go_default_library", "//nodeup/pkg/model:go_default_library", "//nodeup/pkg/model/networking:go_default_library", "//pkg/apis/kops:go_default_library", @@ -23,6 +22,7 @@ go_library( "//upup/pkg/fi/secrets:go_default_library", "//upup/pkg/fi/utils:go_default_library", "//util/pkg/architectures:go_default_library", + "//util/pkg/distributions:go_default_library", "//util/pkg/vfs:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws:go_default_library", "//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library", diff --git a/upup/pkg/fi/nodeup/command.go b/upup/pkg/fi/nodeup/command.go index f30923af91..f62946757c 100644 --- a/upup/pkg/fi/nodeup/command.go +++ b/upup/pkg/fi/nodeup/command.go @@ -27,7 +27,6 @@ import ( "strings" "time" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/nodeup/pkg/model" "k8s.io/kops/nodeup/pkg/model/networking" api "k8s.io/kops/pkg/apis/kops" @@ -41,6 +40,7 @@ import ( "k8s.io/kops/upup/pkg/fi/secrets" "k8s.io/kops/upup/pkg/fi/utils" "k8s.io/kops/util/pkg/architectures" + "k8s.io/kops/util/pkg/distributions" "k8s.io/kops/util/pkg/vfs" "github.com/aws/aws-sdk-go/aws" @@ -157,7 +157,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error { return fmt.Errorf("error determining OS architecture: %v", err) } - distribution, err := distros.FindDistribution("/") + distribution, err := distributions.FindDistribution("/") if err != nil { return fmt.Errorf("error determining OS distribution: %v", err) } diff --git a/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel b/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel index 545f0ff084..ef24661abb 100644 --- a/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel +++ b/upup/pkg/fi/nodeup/nodetasks/BUILD.bazel @@ -21,7 +21,6 @@ go_library( importpath = "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks", visibility = ["//visibility:public"], deps = [ - "//nodeup/pkg/distros:go_default_library", "//pkg/apis/kops:go_default_library", "//pkg/apis/nodeup:go_default_library", "//pkg/backoff:go_default_library", @@ -32,6 +31,7 @@ go_library( "//upup/pkg/fi/nodeup/cloudinit:go_default_library", "//upup/pkg/fi/nodeup/local:go_default_library", "//upup/pkg/fi/utils:go_default_library", + "//util/pkg/distributions:go_default_library", "//util/pkg/hashing:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", diff --git a/upup/pkg/fi/nodeup/nodetasks/package.go b/upup/pkg/fi/nodeup/nodetasks/package.go index d4a9d079c3..f00a4f6712 100644 --- a/upup/pkg/fi/nodeup/nodetasks/package.go +++ b/upup/pkg/fi/nodeup/nodetasks/package.go @@ -26,11 +26,11 @@ import ( "sync" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/cloudinit" "k8s.io/kops/upup/pkg/fi/nodeup/local" + "k8s.io/kops/util/pkg/distributions" "k8s.io/kops/util/pkg/hashing" ) @@ -129,7 +129,7 @@ func (p *Package) String() string { } func (e *Package) Find(c *fi.Context) (*Package, error) { - d, err := distros.FindDistribution("/") + d, err := distributions.FindDistribution("/") if err != nil { return nil, fmt.Errorf("unknown or unsupported distro: %v", err) } @@ -273,7 +273,7 @@ func (_ *Package) RenderLocal(t *local.LocalTarget, a, e, changes *Package) erro packageManagerLock.Lock() defer packageManagerLock.Unlock() - d, err := distros.FindDistribution("/") + d, err := distributions.FindDistribution("/") if err != nil { return fmt.Errorf("unknown or unsupported distro: %v", err) } @@ -327,7 +327,7 @@ func (_ *Package) RenderLocal(t *local.LocalTarget, a, e, changes *Package) erro args = []string{"apt-get", "install", "--yes", "--no-install-recommends"} env = append(env, "DEBIAN_FRONTEND=noninteractive") } else if d.IsRHELFamily() { - if d == distros.DistributionCentos8 || d == distros.DistributionRhel8 { + if d == distributions.DistributionCentos8 || d == distributions.DistributionRhel8 { args = []string{"/usr/bin/dnf", "install", "-y", "--setopt=install_weak_deps=False"} } else { args = []string{"/usr/bin/yum", "install", "-y"} diff --git a/upup/pkg/fi/nodeup/nodetasks/service.go b/upup/pkg/fi/nodeup/nodetasks/service.go index 433f4e0c04..2165097a4f 100644 --- a/upup/pkg/fi/nodeup/nodetasks/service.go +++ b/upup/pkg/fi/nodeup/nodetasks/service.go @@ -26,10 +26,10 @@ import ( "time" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/cloudinit" "k8s.io/kops/upup/pkg/fi/nodeup/local" + "k8s.io/kops/util/pkg/distributions" ) const ( @@ -127,7 +127,7 @@ func getSystemdStatus(name string) (map[string]string, error) { } func (e *Service) systemdSystemPath() (string, error) { - d, err := distros.FindDistribution("/") + d, err := distributions.FindDistribution("/") if err != nil { return "", fmt.Errorf("unknown or unsupported distro: %v", err) } @@ -136,9 +136,9 @@ func (e *Service) systemdSystemPath() (string, error) { return debianSystemdSystemPath, nil } else if d.IsRHELFamily() { return centosSystemdSystemPath, nil - } else if d == distros.DistributionFlatcar { + } else if d == distributions.DistributionFlatcar { return flatcarSystemdSystemPath, nil - } else if d == distros.DistributionContainerOS { + } else if d == distributions.DistributionContainerOS { return containerosSystemdSystemPath, nil } else { return "", fmt.Errorf("unsupported systemd system") diff --git a/upup/pkg/fi/nodeup/nodetasks/update_packages.go b/upup/pkg/fi/nodeup/nodetasks/update_packages.go index 6d4b1d35de..d0d03e4453 100644 --- a/upup/pkg/fi/nodeup/nodetasks/update_packages.go +++ b/upup/pkg/fi/nodeup/nodetasks/update_packages.go @@ -23,10 +23,10 @@ import ( "syscall" "k8s.io/klog/v2" - "k8s.io/kops/nodeup/pkg/distros" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/cloudinit" "k8s.io/kops/upup/pkg/fi/nodeup/local" + "k8s.io/kops/util/pkg/distributions" ) type UpdatePackages struct { @@ -65,7 +65,7 @@ func (_ *UpdatePackages) RenderLocal(t *local.LocalTarget, a, e, changes *Update klog.Infof("SKIP_PACKAGE_UPDATE was set; skipping package update") return nil } - d, err := distros.FindDistribution("/") + d, err := distributions.FindDistribution("/") if err != nil { return fmt.Errorf("unknown or unsupported distro: %v", err) } diff --git a/util/pkg/architectures/BUILD.bazel b/util/pkg/architectures/BUILD.bazel index 7654a29275..e9fc7d9848 100644 --- a/util/pkg/architectures/BUILD.bazel +++ b/util/pkg/architectures/BUILD.bazel @@ -5,5 +5,4 @@ go_library( srcs = ["architectures.go"], importpath = "k8s.io/kops/util/pkg/architectures", visibility = ["//visibility:public"], - deps = ["//vendor/k8s.io/klog/v2:go_default_library"], ) diff --git a/util/pkg/architectures/architectures.go b/util/pkg/architectures/architectures.go index a0b1269a91..7ab4de1124 100644 --- a/util/pkg/architectures/architectures.go +++ b/util/pkg/architectures/architectures.go @@ -20,13 +20,11 @@ import ( "fmt" "os" "runtime" - - "k8s.io/klog/v2" ) type Architecture string -var ( +const ( ArchitectureAmd64 Architecture = "amd64" ArchitectureArm64 Architecture = "arm64" ) @@ -58,19 +56,3 @@ func GetSupported() []Architecture { ArchitectureArm64, } } - -func (a Architecture) BuildTags() []string { - var t []string - - switch a { - case ArchitectureAmd64: - t = []string{"_amd64"} - case ArchitectureArm64: - t = []string{"_arm64"} - default: - klog.Fatalf("unknown architecture: %s", a) - return nil - } - - return t -} diff --git a/util/pkg/distributions/BUILD.bazel b/util/pkg/distributions/BUILD.bazel new file mode 100644 index 0000000000..2ba0c1ef52 --- /dev/null +++ b/util/pkg/distributions/BUILD.bazel @@ -0,0 +1,21 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "distributions.go", + "identify.go", + ], + importpath = "k8s.io/kops/util/pkg/distributions", + visibility = ["//visibility:public"], + deps = ["//vendor/k8s.io/klog/v2:go_default_library"], +) + +go_test( + name = "go_default_test", + srcs = ["identify_test.go"], + data = [ + "//util/pkg/distributions/tests:exported_testdata", # keep + ], + embed = [":go_default_library"], +) diff --git a/nodeup/pkg/distros/distribution.go b/util/pkg/distributions/distributions.go similarity index 80% rename from nodeup/pkg/distros/distribution.go rename to util/pkg/distributions/distributions.go index db09c5a9eb..6c3388e415 100644 --- a/nodeup/pkg/distros/distribution.go +++ b/util/pkg/distributions/distributions.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package distros +package distributions import ( "k8s.io/klog/v2" @@ -22,12 +22,12 @@ import ( type Distribution string -var ( - DistributionDebian9 Distribution = "debian9" +const ( + DistributionDebian9 Distribution = "stretch" DistributionDebian10 Distribution = "buster" - DistributionXenial Distribution = "xenial" - DistributionBionic Distribution = "bionic" - DistributionFocal Distribution = "focal" + DistributionUbuntu1604 Distribution = "xenial" + DistributionUbuntu1804 Distribution = "bionic" + DistributionUbuntu2004 Distribution = "focal" DistributionAmazonLinux2 Distribution = "amazonlinux2" DistributionRhel7 Distribution = "rhel7" DistributionCentos7 Distribution = "centos7" @@ -41,7 +41,7 @@ func (d Distribution) IsDebianFamily() bool { switch d { case DistributionDebian9, DistributionDebian10: return true - case DistributionXenial, DistributionBionic, DistributionFocal: + case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004: return true case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2: return false @@ -57,7 +57,7 @@ func (d Distribution) IsUbuntu() bool { switch d { case DistributionDebian9, DistributionDebian10: return false - case DistributionXenial, DistributionBionic, DistributionFocal: + case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004: return true case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2: return false @@ -73,7 +73,7 @@ func (d Distribution) IsRHELFamily() bool { switch d { case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2: return true - case DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10: + case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004, DistributionDebian9, DistributionDebian10: return false case DistributionFlatcar, DistributionContainerOS: return false @@ -85,7 +85,7 @@ func (d Distribution) IsRHELFamily() bool { func (d Distribution) IsSystemd() bool { switch d { - case DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10: + case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004, DistributionDebian9, DistributionDebian10: return true case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2: return true diff --git a/util/pkg/distributions/identify.go b/util/pkg/distributions/identify.go new file mode 100644 index 0000000000..fc941c0dda --- /dev/null +++ b/util/pkg/distributions/identify.go @@ -0,0 +1,86 @@ +/* +Copyright 2019 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 distributions + +import ( + "fmt" + "io/ioutil" + "path" + "strings" + + "k8s.io/klog/v2" +) + +// FindDistribution identifies the distribution on which we are running +func FindDistribution(rootfs string) (Distribution, error) { + // All supported distros have an /etc/os-release file + osReleaseBytes, err := ioutil.ReadFile(path.Join(rootfs, "etc/os-release")) + osRelease := make(map[string]string) + if err == nil { + for _, line := range strings.Split(string(osReleaseBytes), "\n") { + line = strings.TrimSpace(line) + if strings.HasPrefix(line, "ID=") { + osRelease["ID"] = strings.Trim(line[3:], "\"") + } + if strings.HasPrefix(line, "VERSION_ID=") { + osRelease["VERSION_ID"] = strings.Trim(line[11:], "\"") + } + } + } else { + return "", fmt.Errorf("reading /etc/os-release: %v", err) + } + + distro := fmt.Sprintf("%s-%s", osRelease["ID"], osRelease["VERSION_ID"]) + + // Most distros have a fixed VERSION_ID + switch distro { + case "amzn-2": + return DistributionAmazonLinux2, nil + case "centos-7": + return DistributionCentos7, nil + case "centos-8": + return DistributionCentos8, nil + case "debian-9": + return DistributionDebian9, nil + case "debian-10": + return DistributionDebian10, nil + case "ubuntu-16.04": + return DistributionUbuntu1604, nil + case "ubuntu-18.04": + return DistributionUbuntu1804, nil + case "ubuntu-20.04": + return DistributionUbuntu2004, nil + } + + // Some distros have a more verbose VERSION_ID + if strings.HasPrefix(distro, "cos-") { + return DistributionContainerOS, nil + } + if strings.HasPrefix(distro, "flatcar-") { + return DistributionFlatcar, nil + } + if strings.HasPrefix(distro, "rhel-7.") { + return DistributionRhel7, nil + } + if strings.HasPrefix(distro, "rhel-8.") { + return DistributionRhel8, nil + } + + // Some distros are not supported + klog.V(2).Infof("Contents of /etc/os-release:\n%s", osReleaseBytes) + return "", fmt.Errorf("unsupported distro: %s", distro) +} diff --git a/util/pkg/distributions/identify_test.go b/util/pkg/distributions/identify_test.go new file mode 100644 index 0000000000..2a6354a5dc --- /dev/null +++ b/util/pkg/distributions/identify_test.go @@ -0,0 +1,119 @@ +/* +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 distributions + +import ( + "fmt" + "path" + "reflect" + "testing" +) + +func TestFindDistribution(t *testing.T) { + tests := []struct { + rootfs string + err error + expected Distribution + }{ + { + rootfs: "amazonlinux2", + err: nil, + expected: DistributionAmazonLinux2, + }, + { + rootfs: "centos7", + err: nil, + expected: DistributionCentos7, + }, + { + rootfs: "centos8", + err: nil, + expected: DistributionCentos8, + }, + { + rootfs: "coreos", + err: fmt.Errorf("unsupported distro: coreos-2247.7.0"), + expected: "", + }, + { + rootfs: "containeros", + err: nil, + expected: DistributionContainerOS, + }, + { + rootfs: "debian8", + err: fmt.Errorf("unsupported distro: debian-8"), + expected: "", + }, + { + rootfs: "debian9", + err: nil, + expected: DistributionDebian9, + }, + { + rootfs: "debian10", + err: nil, + expected: DistributionDebian10, + }, + { + rootfs: "flatcar", + err: nil, + expected: DistributionFlatcar, + }, + { + rootfs: "rhel7", + err: nil, + expected: DistributionRhel7, + }, + { + rootfs: "rhel8", + err: nil, + expected: DistributionRhel8, + }, + { + rootfs: "ubuntu1604", + err: nil, + expected: DistributionUbuntu1604, + }, + { + rootfs: "ubuntu1804", + err: nil, + expected: DistributionUbuntu1804, + }, + { + rootfs: "ubuntu2004", + err: nil, + expected: DistributionUbuntu2004, + }, + { + rootfs: "notfound", + err: fmt.Errorf("reading /etc/os-release: open tests/notfound/etc/os-release: no such file or directory"), + expected: "", + }, + } + + for _, test := range tests { + actual, err := FindDistribution(path.Join("tests", test.rootfs)) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("unexpected error, actual=\"%v\", expected=\"%v\"", err, test.err) + continue + } + if actual != test.expected { + t.Errorf("unexpected distribution, actual=%q, expected=%q", actual, test.expected) + } + } +} diff --git a/util/pkg/distributions/tests/BUILD.bazel b/util/pkg/distributions/tests/BUILD.bazel new file mode 100644 index 0000000000..12028374dc --- /dev/null +++ b/util/pkg/distributions/tests/BUILD.bazel @@ -0,0 +1,5 @@ +filegroup( + name = "exported_testdata", + srcs = glob(["**"]), + visibility = ["//visibility:public"], +) diff --git a/util/pkg/distributions/tests/amazonlinux2/etc/os-release b/util/pkg/distributions/tests/amazonlinux2/etc/os-release new file mode 100644 index 0000000000..07a45072fb --- /dev/null +++ b/util/pkg/distributions/tests/amazonlinux2/etc/os-release @@ -0,0 +1,9 @@ +NAME="Amazon Linux" +VERSION="2" +ID="amzn" +ID_LIKE="centos rhel fedora" +VERSION_ID="2" +PRETTY_NAME="Amazon Linux 2" +ANSI_COLOR="0;33" +CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" +HOME_URL="https://amazonlinux.com/" diff --git a/util/pkg/distributions/tests/centos7/etc/os-release b/util/pkg/distributions/tests/centos7/etc/os-release new file mode 100644 index 0000000000..7037a940fa --- /dev/null +++ b/util/pkg/distributions/tests/centos7/etc/os-release @@ -0,0 +1,16 @@ +NAME="CentOS Linux" +VERSION="7 (Core)" +ID="centos" +ID_LIKE="rhel fedora" +VERSION_ID="7" +PRETTY_NAME="CentOS Linux 7 (Core)" +ANSI_COLOR="0;31" +CPE_NAME="cpe:/o:centos:centos:7" +HOME_URL="https://www.centos.org/" +BUG_REPORT_URL="https://bugs.centos.org/" + +CENTOS_MANTISBT_PROJECT="CentOS-7" +CENTOS_MANTISBT_PROJECT_VERSION="7" +REDHAT_SUPPORT_PRODUCT="centos" +REDHAT_SUPPORT_PRODUCT_VERSION="7" + diff --git a/util/pkg/distributions/tests/centos8/etc/os-release b/util/pkg/distributions/tests/centos8/etc/os-release new file mode 100644 index 0000000000..7f10b7745b --- /dev/null +++ b/util/pkg/distributions/tests/centos8/etc/os-release @@ -0,0 +1,17 @@ +NAME="CentOS Linux" +VERSION="8 (Core)" +ID="centos" +ID_LIKE="rhel fedora" +VERSION_ID="8" +PLATFORM_ID="platform:el8" +PRETTY_NAME="CentOS Linux 8 (Core)" +ANSI_COLOR="0;31" +CPE_NAME="cpe:/o:centos:centos:8" +HOME_URL="https://www.centos.org/" +BUG_REPORT_URL="https://bugs.centos.org/" + +CENTOS_MANTISBT_PROJECT="CentOS-8" +CENTOS_MANTISBT_PROJECT_VERSION="8" +REDHAT_SUPPORT_PRODUCT="centos" +REDHAT_SUPPORT_PRODUCT_VERSION="8" + diff --git a/util/pkg/distributions/tests/containeros/etc/os-release b/util/pkg/distributions/tests/containeros/etc/os-release new file mode 100644 index 0000000000..d3c9380be5 --- /dev/null +++ b/util/pkg/distributions/tests/containeros/etc/os-release @@ -0,0 +1,11 @@ +BUILD_ID=12871.1185.0 +NAME="Container-Optimized OS" +KERNEL_COMMIT_ID=1d5bc45f886bc0308010614cdcdf658f5fb44a25 +GOOGLE_CRASH_ID=Lakitu +VERSION_ID=81 +BUG_REPORT_URL="https://cloud.google.com/container-optimized-os/docs/resources/support-policy#contact_us" +PRETTY_NAME="Container-Optimized OS from Google" +VERSION=81 +GOOGLE_METRICS_PRODUCT_ID=26 +HOME_URL="https://cloud.google.com/container-optimized-os/docs" +ID=cos diff --git a/util/pkg/distributions/tests/coreos/etc/os-release b/util/pkg/distributions/tests/coreos/etc/os-release new file mode 100644 index 0000000000..716bb544d4 --- /dev/null +++ b/util/pkg/distributions/tests/coreos/etc/os-release @@ -0,0 +1,10 @@ +NAME="Container Linux by CoreOS" +ID=coreos +VERSION=2247.7.0 +VERSION_ID=2247.7.0 +BUILD_ID=2019-11-19-2251 +PRETTY_NAME="Container Linux by CoreOS 2247.7.0 (Rhyolite)" +ANSI_COLOR="38;5;75" +HOME_URL="https://coreos.com/" +BUG_REPORT_URL="https://issues.coreos.com" +COREOS_BOARD="amd64-usr" diff --git a/util/pkg/distributions/tests/debian10/etc/os-release b/util/pkg/distributions/tests/debian10/etc/os-release new file mode 100644 index 0000000000..9b5419df8b --- /dev/null +++ b/util/pkg/distributions/tests/debian10/etc/os-release @@ -0,0 +1,9 @@ +PRETTY_NAME="Debian GNU/Linux 10 (buster)" +NAME="Debian GNU/Linux" +VERSION_ID="10" +VERSION="10 (buster)" +VERSION_CODENAME=buster +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" diff --git a/util/pkg/distributions/tests/debian8/etc/os-release b/util/pkg/distributions/tests/debian8/etc/os-release new file mode 100644 index 0000000000..120c51b089 --- /dev/null +++ b/util/pkg/distributions/tests/debian8/etc/os-release @@ -0,0 +1,8 @@ +PRETTY_NAME="Debian GNU/Linux 8 (jessie)" +NAME="Debian GNU/Linux" +VERSION_ID="8" +VERSION="8 (jessie)" +ID=debian +HOME_URL="http://www.debian.org/" +SUPPORT_URL="http://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" diff --git a/util/pkg/distributions/tests/debian9/etc/os-release b/util/pkg/distributions/tests/debian9/etc/os-release new file mode 100644 index 0000000000..ea56ca0df0 --- /dev/null +++ b/util/pkg/distributions/tests/debian9/etc/os-release @@ -0,0 +1,8 @@ +PRETTY_NAME="Debian GNU/Linux 9 (stretch)" +NAME="Debian GNU/Linux" +VERSION_ID="9" +VERSION="9 (stretch)" +ID=debian +HOME_URL="https://www.debian.org/" +SUPPORT_URL="https://www.debian.org/support" +BUG_REPORT_URL="https://bugs.debian.org/" diff --git a/util/pkg/distributions/tests/flatcar/etc/os-release b/util/pkg/distributions/tests/flatcar/etc/os-release new file mode 100644 index 0000000000..fbf4ad5ba8 --- /dev/null +++ b/util/pkg/distributions/tests/flatcar/etc/os-release @@ -0,0 +1,11 @@ +NAME="Flatcar Container Linux by Kinvolk" +ID=flatcar +ID_LIKE=coreos +VERSION=2592.0.0 +VERSION_ID=2592.0.0 +BUILD_ID=2020-08-05-2321 +PRETTY_NAME="Flatcar Container Linux by Kinvolk 2592.0.0 (Oklo)" +ANSI_COLOR="38;5;75" +HOME_URL="https://flatcar-linux.org/" +BUG_REPORT_URL="https://issues.flatcar-linux.org" +FLATCAR_BOARD="amd64-usr" diff --git a/util/pkg/distributions/tests/rhel7/etc/os-release b/util/pkg/distributions/tests/rhel7/etc/os-release new file mode 100644 index 0000000000..e76237a691 --- /dev/null +++ b/util/pkg/distributions/tests/rhel7/etc/os-release @@ -0,0 +1,17 @@ +NAME="Red Hat Enterprise Linux Server" +VERSION="7.8 (Maipo)" +ID="rhel" +ID_LIKE="fedora" +VARIANT="Server" +VARIANT_ID="server" +VERSION_ID="7.8" +PRETTY_NAME="Red Hat Enterprise Linux Server 7.8 (Maipo)" +ANSI_COLOR="0;31" +CPE_NAME="cpe:/o:redhat:enterprise_linux:7.8:GA:server" +HOME_URL="https://www.redhat.com/" +BUG_REPORT_URL="https://bugzilla.redhat.com/" + +REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7" +REDHAT_BUGZILLA_PRODUCT_VERSION=7.8 +REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" +REDHAT_SUPPORT_PRODUCT_VERSION="7.8" diff --git a/util/pkg/distributions/tests/rhel8/etc/os-release b/util/pkg/distributions/tests/rhel8/etc/os-release new file mode 100644 index 0000000000..1d5515ba63 --- /dev/null +++ b/util/pkg/distributions/tests/rhel8/etc/os-release @@ -0,0 +1,16 @@ +NAME="Red Hat Enterprise Linux" +VERSION="8.2 (Ootpa)" +ID="rhel" +ID_LIKE="fedora" +VERSION_ID="8.2" +PLATFORM_ID="platform:el8" +PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)" +ANSI_COLOR="0;31" +CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA" +HOME_URL="https://www.redhat.com/" +BUG_REPORT_URL="https://bugzilla.redhat.com/" + +REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8" +REDHAT_BUGZILLA_PRODUCT_VERSION=8.2 +REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" +REDHAT_SUPPORT_PRODUCT_VERSION="8.2" diff --git a/util/pkg/distributions/tests/ubuntu1604/etc/os-release b/util/pkg/distributions/tests/ubuntu1604/etc/os-release new file mode 100644 index 0000000000..d748d55686 --- /dev/null +++ b/util/pkg/distributions/tests/ubuntu1604/etc/os-release @@ -0,0 +1,11 @@ +NAME="Ubuntu" +VERSION="16.04.6 LTS (Xenial Xerus)" +ID=ubuntu +ID_LIKE=debian +PRETTY_NAME="Ubuntu 16.04.6 LTS" +VERSION_ID="16.04" +HOME_URL="http://www.ubuntu.com/" +SUPPORT_URL="http://help.ubuntu.com/" +BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" +VERSION_CODENAME=xenial +UBUNTU_CODENAME=xenial diff --git a/util/pkg/distributions/tests/ubuntu1804/etc/os-release b/util/pkg/distributions/tests/ubuntu1804/etc/os-release new file mode 100644 index 0000000000..c284fcbf92 --- /dev/null +++ b/util/pkg/distributions/tests/ubuntu1804/etc/os-release @@ -0,0 +1,12 @@ +NAME="Ubuntu" +VERSION="18.04.4 LTS (Bionic Beaver)" +ID=ubuntu +ID_LIKE=debian +PRETTY_NAME="Ubuntu 18.04.4 LTS" +VERSION_ID="18.04" +HOME_URL="https://www.ubuntu.com/" +SUPPORT_URL="https://help.ubuntu.com/" +BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" +PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" +VERSION_CODENAME=bionic +UBUNTU_CODENAME=bionic diff --git a/util/pkg/distributions/tests/ubuntu2004/etc/os-release b/util/pkg/distributions/tests/ubuntu2004/etc/os-release new file mode 100644 index 0000000000..18dfd4e6da --- /dev/null +++ b/util/pkg/distributions/tests/ubuntu2004/etc/os-release @@ -0,0 +1,12 @@ +NAME="Ubuntu" +VERSION="20.04.1 LTS (Focal Fossa)" +ID=ubuntu +ID_LIKE=debian +PRETTY_NAME="Ubuntu 20.04.1 LTS" +VERSION_ID="20.04" +HOME_URL="https://www.ubuntu.com/" +SUPPORT_URL="https://help.ubuntu.com/" +BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" +PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" +VERSION_CODENAME=focal +UBUNTU_CODENAME=focal