Merge pull request #9766 from hakman/distros

Use /etc/os-release to identify the distribution
This commit is contained in:
Kubernetes Prow Robot 2020-08-17 22:37:30 -07:00 committed by GitHub
commit ffe3b3468d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
50 changed files with 519 additions and 283 deletions

View File

@ -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

View File

@ -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",
],

View File

@ -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)
}

View File

@ -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"],
)

View File

@ -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")
}

View File

@ -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",

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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{

View File

@ -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) {

View File

@ -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

View File

@ -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
}

View File

@ -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/"

View File

@ -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)

View File

@ -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")
}
}

View File

@ -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"
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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"})

View File

@ -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",

View File

@ -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)

View File

@ -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",

View File

@ -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)
}

View File

@ -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",

View File

@ -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"}

View File

@ -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")

View File

@ -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)
}

View File

@ -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"],
)

View File

@ -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
}

View File

@ -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"],
)

View File

@ -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

View File

@ -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)
}

View File

@ -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)
}
}
}

View File

@ -0,0 +1,5 @@
filegroup(
name = "exported_testdata",
srcs = glob(["**"]),
visibility = ["//visibility:public"],
)

View File

@ -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/"

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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"

View File

@ -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/"

View File

@ -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/"

View File

@ -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/"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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