mirror of https://github.com/kubernetes/kops.git
Merge pull request #9766 from hakman/distros
Use /etc/os-release to identify the distribution
This commit is contained in:
commit
ffe3b3468d
|
|
@ -47,7 +47,6 @@ k8s.io/kops/node-authorizer/pkg/client
|
||||||
k8s.io/kops/node-authorizer/pkg/server
|
k8s.io/kops/node-authorizer/pkg/server
|
||||||
k8s.io/kops/node-authorizer/pkg/utils
|
k8s.io/kops/node-authorizer/pkg/utils
|
||||||
k8s.io/kops/nodeup/pkg/bootstrap
|
k8s.io/kops/nodeup/pkg/bootstrap
|
||||||
k8s.io/kops/nodeup/pkg/distros
|
|
||||||
k8s.io/kops/nodeup/pkg/model
|
k8s.io/kops/nodeup/pkg/model
|
||||||
k8s.io/kops/nodeup/pkg/model/networking
|
k8s.io/kops/nodeup/pkg/model/networking
|
||||||
k8s.io/kops/nodeup/pkg/model/resources
|
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/pkg/kutil
|
||||||
k8s.io/kops/upup/tools/generators/fitask
|
k8s.io/kops/upup/tools/generators/fitask
|
||||||
k8s.io/kops/util/pkg/architectures
|
k8s.io/kops/util/pkg/architectures
|
||||||
|
k8s.io/kops/util/pkg/distributions
|
||||||
k8s.io/kops/util/pkg/env
|
k8s.io/kops/util/pkg/env
|
||||||
k8s.io/kops/util/pkg/exec
|
k8s.io/kops/util/pkg/exec
|
||||||
k8s.io/kops/util/pkg/hashing
|
k8s.io/kops/util/pkg/hashing
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,11 @@ go_library(
|
||||||
importpath = "k8s.io/kops/nodeup/pkg/bootstrap",
|
importpath = "k8s.io/kops/nodeup/pkg/bootstrap",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//nodeup/pkg/distros:go_default_library",
|
|
||||||
"//pkg/systemd:go_default_library",
|
"//pkg/systemd:go_default_library",
|
||||||
"//upup/pkg/fi:go_default_library",
|
"//upup/pkg/fi:go_default_library",
|
||||||
"//upup/pkg/fi/nodeup/local:go_default_library",
|
"//upup/pkg/fi/nodeup/local:go_default_library",
|
||||||
"//upup/pkg/fi/nodeup/nodetasks:go_default_library",
|
"//upup/pkg/fi/nodeup/nodetasks:go_default_library",
|
||||||
|
"//util/pkg/distributions:go_default_library",
|
||||||
"//util/pkg/vfs:go_default_library",
|
"//util/pkg/vfs:go_default_library",
|
||||||
"//vendor/k8s.io/klog/v2:go_default_library",
|
"//vendor/k8s.io/klog/v2:go_default_library",
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/systemd"
|
"k8s.io/kops/pkg/systemd"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"k8s.io/kops/util/pkg/vfs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -38,7 +38,7 @@ type Installation struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Installation) Run() error {
|
func (i *Installation) Run() error {
|
||||||
_, err := distros.FindDistribution("/")
|
_, err := distributions.FindDistribution("/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error determining OS distribution: %v", err)
|
return fmt.Errorf("error determining OS distribution: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"],
|
|
||||||
)
|
|
||||||
|
|
@ -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")
|
|
||||||
}
|
|
||||||
|
|
@ -40,7 +40,6 @@ go_library(
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//:go_default_library",
|
"//:go_default_library",
|
||||||
"//nodeup/pkg/distros:go_default_library",
|
|
||||||
"//nodeup/pkg/model/resources:go_default_library",
|
"//nodeup/pkg/model/resources:go_default_library",
|
||||||
"//pkg/apis/kops:go_default_library",
|
"//pkg/apis/kops:go_default_library",
|
||||||
"//pkg/apis/kops/model: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/cloudup/awsup:go_default_library",
|
||||||
"//upup/pkg/fi/nodeup/nodetasks:go_default_library",
|
"//upup/pkg/fi/nodeup/nodetasks:go_default_library",
|
||||||
"//util/pkg/architectures:go_default_library",
|
"//util/pkg/architectures:go_default_library",
|
||||||
|
"//util/pkg/distributions:go_default_library",
|
||||||
"//util/pkg/exec:go_default_library",
|
"//util/pkg/exec:go_default_library",
|
||||||
"//util/pkg/proxy:go_default_library",
|
"//util/pkg/proxy:go_default_library",
|
||||||
"//util/pkg/vfs:go_default_library",
|
"//util/pkg/vfs:go_default_library",
|
||||||
|
|
@ -102,7 +102,6 @@ go_test(
|
||||||
data = glob(["tests/**"]), #keep
|
data = glob(["tests/**"]), #keep
|
||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//nodeup/pkg/distros:go_default_library",
|
|
||||||
"//pkg/apis/kops:go_default_library",
|
"//pkg/apis/kops:go_default_library",
|
||||||
"//pkg/apis/nodeup:go_default_library",
|
"//pkg/apis/nodeup:go_default_library",
|
||||||
"//pkg/assets:go_default_library",
|
"//pkg/assets:go_default_library",
|
||||||
|
|
@ -115,6 +114,7 @@ go_test(
|
||||||
"//upup/pkg/fi/cloudup:go_default_library",
|
"//upup/pkg/fi/cloudup:go_default_library",
|
||||||
"//upup/pkg/fi/nodeup/nodetasks:go_default_library",
|
"//upup/pkg/fi/nodeup/nodetasks:go_default_library",
|
||||||
"//util/pkg/architectures:go_default_library",
|
"//util/pkg/architectures:go_default_library",
|
||||||
|
"//util/pkg/distributions:go_default_library",
|
||||||
"//util/pkg/exec:go_default_library",
|
"//util/pkg/exec:go_default_library",
|
||||||
"//util/pkg/hashing:go_default_library",
|
"//util/pkg/hashing:go_default_library",
|
||||||
"//util/pkg/vfs:go_default_library",
|
"//util/pkg/vfs:go_default_library",
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/nodeup/pkg/model/resources"
|
"k8s.io/kops/nodeup/pkg/model/resources"
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/flagbuilder"
|
"k8s.io/kops/pkg/flagbuilder"
|
||||||
|
|
@ -30,6 +29,7 @@ import (
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerdBuilder install containerd (just the packages at the moment)
|
// ContainerdBuilder install containerd (just the packages at the moment)
|
||||||
|
|
@ -44,7 +44,7 @@ var containerdVersions = []packageVersion{
|
||||||
{
|
{
|
||||||
PackageVersion: "1.2.4",
|
PackageVersion: "1.2.4",
|
||||||
Name: "containerd.io",
|
Name: "containerd.io",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "1.2.4-1",
|
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",
|
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
|
// @check: neither flatcar nor containeros need provision containerd.service, just the containerd daemon options
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
klog.Infof("Detected Flatcar; won't install containerd")
|
klog.Infof("Detected Flatcar; won't install containerd")
|
||||||
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
klog.Infof("Detected ContainerOS; won't install containerd")
|
klog.Infof("Detected ContainerOS; won't install containerd")
|
||||||
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -22,11 +22,11 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/flagbuilder"
|
"k8s.io/kops/pkg/flagbuilder"
|
||||||
"k8s.io/kops/pkg/testutils"
|
"k8s.io/kops/pkg/testutils"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestContainerdPackageNames(t *testing.T) {
|
func TestContainerdPackageNames(t *testing.T) {
|
||||||
|
|
@ -154,7 +154,7 @@ func runContainerdBuilderTest(t *testing.T, key string) {
|
||||||
basedir := path.Join("tests/containerdbuilder/", key)
|
basedir := path.Join("tests/containerdbuilder/", key)
|
||||||
|
|
||||||
nodeUpModelContext, err := BuildNodeupModelContext(basedir)
|
nodeUpModelContext, err := BuildNodeupModelContext(basedir)
|
||||||
nodeUpModelContext.Distribution = distros.DistributionXenial
|
nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error parsing cluster yaml %q: %v", basedir, err)
|
t.Fatalf("error parsing cluster yaml %q: %v", basedir, err)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/apis/kops/model"
|
"k8s.io/kops/pkg/apis/kops/model"
|
||||||
"k8s.io/kops/pkg/apis/kops/util"
|
"k8s.io/kops/pkg/apis/kops/util"
|
||||||
|
|
@ -32,6 +31,7 @@ import (
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"k8s.io/kops/util/pkg/vfs"
|
||||||
"k8s.io/utils/mount"
|
"k8s.io/utils/mount"
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ type NodeupModelContext struct {
|
||||||
Assets *fi.AssetStore
|
Assets *fi.AssetStore
|
||||||
Cluster *kops.Cluster
|
Cluster *kops.Cluster
|
||||||
ConfigBase vfs.Path
|
ConfigBase vfs.Path
|
||||||
Distribution distros.Distribution
|
Distribution distributions.Distribution
|
||||||
InstanceGroup *kops.InstanceGroup
|
InstanceGroup *kops.InstanceGroup
|
||||||
KeyStore fi.CAStore
|
KeyStore fi.CAStore
|
||||||
NodeupConfig *nodeup.Config
|
NodeupConfig *nodeup.Config
|
||||||
|
|
@ -81,11 +81,11 @@ func (c *NodeupModelContext) SSLHostPaths() []string {
|
||||||
paths := []string{"/etc/ssl", "/etc/pki/tls", "/etc/pki/ca-trust"}
|
paths := []string{"/etc/ssl", "/etc/pki/tls", "/etc/pki/ca-trust"}
|
||||||
|
|
||||||
switch c.Distribution {
|
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
|
// 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?
|
// TODO: Just check if the directories exist?
|
||||||
paths = append(paths, "/usr/share/ca-certificates")
|
paths = append(paths, "/usr/share/ca-certificates")
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
paths = append(paths, "/usr/share/ca-certificates")
|
paths = append(paths, "/usr/share/ca-certificates")
|
||||||
default:
|
default:
|
||||||
paths = append(paths, "/usr/share/ssl", "/usr/ssl", "/usr/lib/ssl", "/usr/local/openssl", "/var/ssl", "/etc/openssl")
|
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
|
// PathSrvKubernetes returns the path for the kubernetes service files
|
||||||
func (c *NodeupModelContext) PathSrvKubernetes() string {
|
func (c *NodeupModelContext) PathSrvKubernetes() string {
|
||||||
switch c.Distribution {
|
switch c.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
return "/etc/srv/kubernetes"
|
return "/etc/srv/kubernetes"
|
||||||
default:
|
default:
|
||||||
return "/srv/kubernetes"
|
return "/srv/kubernetes"
|
||||||
|
|
@ -164,7 +164,7 @@ func (c *NodeupModelContext) FileAssetsDefaultPath() string {
|
||||||
// PathSrvSshproxy returns the path for the SSH proxy
|
// PathSrvSshproxy returns the path for the SSH proxy
|
||||||
func (c *NodeupModelContext) PathSrvSshproxy() string {
|
func (c *NodeupModelContext) PathSrvSshproxy() string {
|
||||||
switch c.Distribution {
|
switch c.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
return "/etc/srv/sshproxy"
|
return "/etc/srv/sshproxy"
|
||||||
default:
|
default:
|
||||||
return "/srv/sshproxy"
|
return "/srv/sshproxy"
|
||||||
|
|
@ -404,10 +404,10 @@ func (c *NodeupModelContext) UseSecureKubelet() bool {
|
||||||
// KubectlPath returns distro based path for kubectl
|
// KubectlPath returns distro based path for kubectl
|
||||||
func (c *NodeupModelContext) KubectlPath() string {
|
func (c *NodeupModelContext) KubectlPath() string {
|
||||||
kubeletCommand := "/usr/local/bin"
|
kubeletCommand := "/usr/local/bin"
|
||||||
if c.Distribution == distros.DistributionFlatcar {
|
if c.Distribution == distributions.DistributionFlatcar {
|
||||||
kubeletCommand = "/opt/bin"
|
kubeletCommand = "/opt/bin"
|
||||||
}
|
}
|
||||||
if c.Distribution == distros.DistributionContainerOS {
|
if c.Distribution == distributions.DistributionContainerOS {
|
||||||
kubeletCommand = "/home/kubernetes/bin"
|
kubeletCommand = "/home/kubernetes/bin"
|
||||||
}
|
}
|
||||||
return kubeletCommand
|
return kubeletCommand
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,10 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
@ -140,7 +140,7 @@ type packageVersion struct {
|
||||||
ExtraPackages map[string]packageInfo
|
ExtraPackages map[string]packageInfo
|
||||||
|
|
||||||
PackageVersion string
|
PackageVersion string
|
||||||
Distros []distros.Distribution
|
Distros []distributions.Distribution
|
||||||
// List of dependencies that can be installed using the system's package
|
// List of dependencies that can be installed using the system's package
|
||||||
// manager (e.g. apt-get install or yum install).
|
// manager (e.g. apt-get install or yum install).
|
||||||
Dependencies []string
|
Dependencies []string
|
||||||
|
|
@ -156,7 +156,7 @@ type packageVersion struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Match package version against configured values
|
// 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 {
|
if d.PackageVersion != packageVersion {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@ package model
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DirectoryBuilder creates required directories
|
// DirectoryBuilder creates required directories
|
||||||
|
|
@ -33,7 +33,7 @@ var _ fi.ModelBuilder = &DirectoryBuilder{}
|
||||||
|
|
||||||
// Build is responsible for specific directories are created - os dependent
|
// Build is responsible for specific directories are created - os dependent
|
||||||
func (b *DirectoryBuilder) Build(c *fi.ModelBuilderContext) error {
|
func (b *DirectoryBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
if b.Distribution == distros.DistributionContainerOS {
|
if b.Distribution == distributions.DistributionContainerOS {
|
||||||
dirname := "/home/kubernetes/bin"
|
dirname := "/home/kubernetes/bin"
|
||||||
|
|
||||||
c.AddTask(&nodetasks.File{
|
c.AddTask(&nodetasks.File{
|
||||||
|
|
@ -51,7 +51,7 @@ func (b *DirectoryBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
|
|
||||||
// We try to put things into /opt/kops
|
// We try to put things into /opt/kops
|
||||||
// On some OSes though, /opt/ is not writeable, and we can't even create the mountpoint
|
// 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/"
|
src := "/mnt/stateful_partition/opt/"
|
||||||
|
|
||||||
c.AddTask(&nodetasks.File{
|
c.AddTask(&nodetasks.File{
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ import (
|
||||||
"github.com/blang/semver/v4"
|
"github.com/blang/semver/v4"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/nodeup/pkg/model/resources"
|
"k8s.io/kops/nodeup/pkg/model/resources"
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/flagbuilder"
|
"k8s.io/kops/pkg/flagbuilder"
|
||||||
|
|
@ -34,6 +33,7 @@ import (
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DockerBuilder install docker (just the packages at the moment)
|
// DockerBuilder install docker (just the packages at the moment)
|
||||||
|
|
@ -50,7 +50,7 @@ var dockerVersions = []packageVersion{
|
||||||
{
|
{
|
||||||
PackageVersion: "17.03.2",
|
PackageVersion: "17.03.2",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "17.03.2~ce-0~debian-stretch",
|
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",
|
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",
|
PackageVersion: "17.03.2",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionXenial},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1604},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "17.03.2~ce-0~ubuntu-xenial",
|
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",
|
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",
|
PackageVersion: "17.03.2",
|
||||||
PlainBinary: true,
|
PlainBinary: true,
|
||||||
Distros: []distros.Distribution{distros.DistributionBionic},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1804},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Source: "http://download.docker.com/linux/static/stable/x86_64/docker-17.03.2-ce.tgz",
|
Source: "http://download.docker.com/linux/static/stable/x86_64/docker-17.03.2-ce.tgz",
|
||||||
Hash: "183b31b001e7480f3c691080486401aa519101a5cfe6e05ad01b9f5521c4112d",
|
Hash: "183b31b001e7480f3c691080486401aa519101a5cfe6e05ad01b9f5521c4112d",
|
||||||
|
|
@ -85,7 +85,7 @@ var dockerVersions = []packageVersion{
|
||||||
{
|
{
|
||||||
PackageVersion: "17.03.2",
|
PackageVersion: "17.03.2",
|
||||||
Name: "docker-ce",
|
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},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "17.03.2.ce",
|
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",
|
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",
|
PackageVersion: "17.09.0",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "17.09.0~ce-0~debian",
|
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",
|
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",
|
PackageVersion: "17.09.0",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionXenial},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1604},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "17.09.0~ce-0~ubuntu",
|
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",
|
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",
|
PackageVersion: "18.06.2",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionXenial},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1604},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.2~ce~3-0~ubuntu",
|
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",
|
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",
|
PackageVersion: "17.09.0",
|
||||||
Name: "docker-ce",
|
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},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "17.09.0.ce",
|
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",
|
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",
|
PackageVersion: "18.03.1",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionBionic},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1804},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.03.1~ce~3-0~ubuntu",
|
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",
|
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",
|
PackageVersion: "18.06.2",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionBionic},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1804},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.2~ce~3-0~ubuntu",
|
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",
|
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",
|
PackageVersion: "18.06.1",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.1~ce~3-0~debian",
|
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",
|
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",
|
PackageVersion: "18.06.2",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.2~ce~3-0~debian",
|
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",
|
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",
|
PackageVersion: "18.06.1",
|
||||||
Name: "docker-ce",
|
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},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.1.ce",
|
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",
|
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",
|
PackageVersion: "18.09.3",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "5:18.09.3~3-0~debian-stretch",
|
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",
|
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",
|
PackageVersion: "18.06.2",
|
||||||
Name: "docker-ce",
|
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},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.2.ce",
|
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",
|
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",
|
PackageVersion: "18.06.3",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionXenial},
|
Distros: []distributions.Distribution{distributions.DistributionUbuntu1604},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.3~ce~3-0~ubuntu",
|
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",
|
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",
|
PackageVersion: "18.06.3",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{
|
Distros: []distributions.Distribution{
|
||||||
distros.DistributionBionic,
|
distributions.DistributionUbuntu1804,
|
||||||
distros.DistributionFocal,
|
distributions.DistributionUbuntu2004,
|
||||||
},
|
},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.3~ce~3-0~ubuntu",
|
Version: "18.06.3~ce~3-0~ubuntu",
|
||||||
|
|
@ -261,7 +261,7 @@ var dockerVersions = []packageVersion{
|
||||||
{
|
{
|
||||||
PackageVersion: "18.06.3",
|
PackageVersion: "18.06.3",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian9},
|
Distros: []distributions.Distribution{distributions.DistributionDebian9},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.3~ce~3-0~debian",
|
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",
|
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",
|
PackageVersion: "18.06.3",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{distros.DistributionDebian10},
|
Distros: []distributions.Distribution{distributions.DistributionDebian10},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.3~ce~3-0~debian",
|
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",
|
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",
|
PackageVersion: "18.06.3",
|
||||||
Name: "docker-ce",
|
Name: "docker-ce",
|
||||||
Distros: []distros.Distribution{
|
Distros: []distributions.Distribution{
|
||||||
distros.DistributionAmazonLinux2,
|
distributions.DistributionAmazonLinux2,
|
||||||
distros.DistributionCentos7,
|
distributions.DistributionCentos7,
|
||||||
distros.DistributionCentos8,
|
distributions.DistributionCentos8,
|
||||||
distros.DistributionRhel7,
|
distributions.DistributionRhel7,
|
||||||
distros.DistributionRhel8,
|
distributions.DistributionRhel8,
|
||||||
},
|
},
|
||||||
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
Architectures: []architectures.Architecture{architectures.ArchitectureAmd64},
|
||||||
Version: "18.06.3.ce",
|
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
|
// @check: neither flatcar nor containeros need provision docker.service, just the docker daemon options
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
klog.Infof("Detected Flatcar; won't install Docker")
|
klog.Infof("Detected Flatcar; won't install Docker")
|
||||||
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
klog.Infof("Detected ContainerOS; won't install Docker")
|
klog.Infof("Detected ContainerOS; won't install Docker")
|
||||||
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
|
||||||
return err
|
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
|
// 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
|
// 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 b, err := ioutil.ReadFile("/etc/docker/daemon.json"); err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/flagbuilder"
|
"k8s.io/kops/pkg/flagbuilder"
|
||||||
"k8s.io/kops/pkg/testutils"
|
"k8s.io/kops/pkg/testutils"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
"k8s.io/kops/util/pkg/hashing"
|
"k8s.io/kops/util/pkg/hashing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -250,7 +250,7 @@ func runDockerBuilderTest(t *testing.T, key string) {
|
||||||
basedir := path.Join("tests/dockerbuilder/", key)
|
basedir := path.Join("tests/dockerbuilder/", key)
|
||||||
|
|
||||||
nodeUpModelContext, err := BuildNodeupModelContext(basedir)
|
nodeUpModelContext, err := BuildNodeupModelContext(basedir)
|
||||||
nodeUpModelContext.Distribution = distros.DistributionXenial
|
nodeUpModelContext.Distribution = distributions.DistributionUbuntu1604
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error parsing cluster yaml %q: %v", basedir, err)
|
t.Fatalf("error parsing cluster yaml %q: %v", basedir, err)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@ limitations under the License.
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/wellknownusers"
|
"k8s.io/kops/pkg/wellknownusers"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
@ -39,11 +39,11 @@ func (b *EtcdBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
klog.Infof("Detected Flatcar; skipping etcd user installation")
|
klog.Infof("Detected Flatcar; skipping etcd user installation")
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
klog.Infof("Detected ContainerOS; skipping etcd user installation")
|
klog.Infof("Detected ContainerOS; skipping etcd user installation")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/flagbuilder"
|
"k8s.io/kops/pkg/flagbuilder"
|
||||||
"k8s.io/kops/pkg/k8scodecs"
|
"k8s.io/kops/pkg/k8scodecs"
|
||||||
"k8s.io/kops/pkg/kubemanifest"
|
"k8s.io/kops/pkg/kubemanifest"
|
||||||
|
|
@ -29,6 +28,7 @@ import (
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
"k8s.io/kops/util/pkg/exec"
|
"k8s.io/kops/util/pkg/exec"
|
||||||
"k8s.io/kops/util/pkg/proxy"
|
"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
|
// Ensure the Volume Plugin dir is mounted on the same path as the host machine so DaemonSet deployment is possible
|
||||||
if volumePluginDir == "" {
|
if volumePluginDir == "" {
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
// Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171
|
// Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171
|
||||||
volumePluginDir = "/home/kubernetes/flexvolume/"
|
volumePluginDir = "/home/kubernetes/flexvolume/"
|
||||||
|
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
// The /usr directory is read-only for Flatcar
|
// The /usr directory is read-only for Flatcar
|
||||||
volumePluginDir = "/var/lib/kubelet/volumeplugins/"
|
volumePluginDir = "/var/lib/kubelet/volumeplugins/"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,10 @@ package model
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/rbac"
|
"k8s.io/kops/pkg/rbac"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"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) {
|
func (b *KubectlBuilder) findKubeconfigUser() (*fi.User, *fi.Group, error) {
|
||||||
var users []string
|
var users []string
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionDebian9, distros.DistributionDebian10:
|
case distributions.DistributionDebian9, distributions.DistributionDebian10:
|
||||||
users = []string{"admin", "root"}
|
users = []string{"admin", "root"}
|
||||||
case distros.DistributionXenial, distros.DistributionBionic, distros.DistributionFocal:
|
case distributions.DistributionUbuntu1604, distributions.DistributionUbuntu1804, distributions.DistributionUbuntu2004:
|
||||||
users = []string{"ubuntu"}
|
users = []string{"ubuntu"}
|
||||||
case distros.DistributionCentos7, distros.DistributionCentos8:
|
case distributions.DistributionCentos7, distributions.DistributionCentos8:
|
||||||
users = []string{"centos"}
|
users = []string{"centos"}
|
||||||
case distros.DistributionAmazonLinux2, distros.DistributionRhel7, distros.DistributionRhel8:
|
case distributions.DistributionAmazonLinux2, distributions.DistributionRhel7, distributions.DistributionRhel8:
|
||||||
users = []string{"ec2-user"}
|
users = []string{"ec2-user"}
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
users = []string{"core"}
|
users = []string{"core"}
|
||||||
default:
|
default:
|
||||||
klog.Warningf("Unknown distro; won't write kubeconfig to homedir %s", b.Distribution)
|
klog.Warningf("Unknown distro; won't write kubeconfig to homedir %s", b.Distribution)
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ import (
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/flagbuilder"
|
"k8s.io/kops/pkg/flagbuilder"
|
||||||
"k8s.io/kops/pkg/nodelabels"
|
"k8s.io/kops/pkg/nodelabels"
|
||||||
|
|
@ -37,6 +36,7 @@ import (
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -145,10 +145,10 @@ func (b *KubeletBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
// kubeletPath returns the path of the kubelet based on distro
|
// kubeletPath returns the path of the kubelet based on distro
|
||||||
func (b *KubeletBuilder) kubeletPath() string {
|
func (b *KubeletBuilder) kubeletPath() string {
|
||||||
kubeletCommand := "/usr/local/bin/kubelet"
|
kubeletCommand := "/usr/local/bin/kubelet"
|
||||||
if b.Distribution == distros.DistributionFlatcar {
|
if b.Distribution == distributions.DistributionFlatcar {
|
||||||
kubeletCommand = "/opt/kubernetes/bin/kubelet"
|
kubeletCommand = "/opt/kubernetes/bin/kubelet"
|
||||||
}
|
}
|
||||||
if b.Distribution == distros.DistributionContainerOS {
|
if b.Distribution == distributions.DistributionContainerOS {
|
||||||
kubeletCommand = "/home/kubernetes/bin/kubelet"
|
kubeletCommand = "/home/kubernetes/bin/kubelet"
|
||||||
}
|
}
|
||||||
return kubeletCommand
|
return kubeletCommand
|
||||||
|
|
@ -299,7 +299,7 @@ func (b *KubeletBuilder) buildKubeletConfig() (*kops.KubeletConfigSpec, error) {
|
||||||
// usesContainerizedMounter returns true if we use the containerized mounter
|
// usesContainerizedMounter returns true if we use the containerized mounter
|
||||||
func (b *KubeletBuilder) usesContainerizedMounter() bool {
|
func (b *KubeletBuilder) usesContainerizedMounter() bool {
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
return true
|
return true
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
|
|
@ -482,11 +482,11 @@ func (b *KubeletBuilder) buildKubeletConfigSpec() (*kops.KubeletConfigSpec, erro
|
||||||
|
|
||||||
if c.VolumePluginDirectory == "" {
|
if c.VolumePluginDirectory == "" {
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
// Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171
|
// Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171
|
||||||
c.VolumePluginDirectory = "/home/kubernetes/flexvolume/"
|
c.VolumePluginDirectory = "/home/kubernetes/flexvolume/"
|
||||||
|
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
// The /usr directory is read-only for Flatcar
|
// The /usr directory is read-only for Flatcar
|
||||||
c.VolumePluginDirectory = "/var/lib/kubelet/volumeplugins/"
|
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
|
// 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
|
// https://github.com/coredns/coredns/blob/master/plugin/loop/README.md#troubleshooting-loops-in-kubernetes-clusters
|
||||||
if c.ResolverConfig == nil {
|
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")
|
c.ResolverConfig = s("/run/systemd/resolve/resolv.conf")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops/util"
|
"k8s.io/kops/pkg/apis/kops/util"
|
||||||
"k8s.io/kops/pkg/systemd"
|
"k8s.io/kops/pkg/systemd"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
@ -40,10 +40,10 @@ var _ fi.ModelBuilder = &LogrotateBuilder{}
|
||||||
func (b *LogrotateBuilder) Build(c *fi.ModelBuilderContext) error {
|
func (b *LogrotateBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
|
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
klog.Infof("Detected ContainerOS; won't install logrotate")
|
klog.Infof("Detected ContainerOS; won't install logrotate")
|
||||||
return nil
|
return nil
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
klog.Infof("Detected Flatcar; won't install logrotate")
|
klog.Infof("Detected Flatcar; won't install logrotate")
|
||||||
default:
|
default:
|
||||||
c.AddTask(&nodetasks.Package{Name: "logrotate"})
|
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
|
// 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 {
|
func (b *LogrotateBuilder) addLogrotateService(c *fi.ModelBuilderContext) error {
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionFlatcar, distros.DistributionContainerOS:
|
case distributions.DistributionFlatcar, distributions.DistributionContainerOS:
|
||||||
// logrotate service already exists
|
// logrotate service already exists
|
||||||
return nil
|
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
|
// Flatcar sets "dateext" options, and maxsize-based rotation will fail if
|
||||||
// the file has been previously rotated on the same calendar date.
|
// 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"
|
options.DateFormat = "-%Y%m%d-%s"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MiscUtilsBuilder ensures that some system packages that are
|
// 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
|
// Build is responsible for configuring the miscellaneous packages we want installed
|
||||||
func (b *MiscUtilsBuilder) Build(c *fi.ModelBuilderContext) error {
|
func (b *MiscUtilsBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
klog.V(2).Infof("Detected ContainerOS; won't install misc. utils")
|
klog.V(2).Infof("Detected ContainerOS; won't install misc. utils")
|
||||||
return nil
|
return nil
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
klog.V(2).Infof("Detected Flatcar; won't install misc. utils")
|
klog.V(2).Infof("Detected Flatcar; won't install misc. utils")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NTPBuilder installs and starts NTP, to ensure accurate clock times.
|
// NTPBuilder installs and starts NTP, to ensure accurate clock times.
|
||||||
|
|
@ -35,10 +35,10 @@ var _ fi.ModelBuilder = &NTPBuilder{}
|
||||||
// Build is responsible for configuring NTP
|
// Build is responsible for configuring NTP
|
||||||
func (b *NTPBuilder) Build(c *fi.ModelBuilderContext) error {
|
func (b *NTPBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionContainerOS:
|
case distributions.DistributionContainerOS:
|
||||||
klog.Infof("Detected ContainerOS; won't install ntp")
|
klog.Infof("Detected ContainerOS; won't install ntp")
|
||||||
return nil
|
return nil
|
||||||
case distros.DistributionFlatcar:
|
case distributions.DistributionFlatcar:
|
||||||
klog.Infof("Detected Flatcar; won't install ntp")
|
klog.Infof("Detected Flatcar; won't install ntp")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@ limitations under the License.
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
@ -64,14 +64,14 @@ func (b *PackagesBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
c.AddTask(&nodetasks.Package{Name: "util-linux"})
|
c.AddTask(&nodetasks.Package{Name: "util-linux"})
|
||||||
// Handle some packages differently for each distro
|
// Handle some packages differently for each distro
|
||||||
switch b.Distribution {
|
switch b.Distribution {
|
||||||
case distros.DistributionRhel7:
|
case distributions.DistributionRhel7:
|
||||||
// Easier to install container-selinux from CentOS than extras
|
// Easier to install container-selinux from CentOS than extras
|
||||||
c.AddTask(&nodetasks.Package{
|
c.AddTask(&nodetasks.Package{
|
||||||
Name: "container-selinux",
|
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"),
|
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"),
|
Hash: s("7de4211fa0dfd240d8827b93763e1eb5f0d56411"),
|
||||||
})
|
})
|
||||||
case distros.DistributionAmazonLinux2:
|
case distributions.DistributionAmazonLinux2:
|
||||||
// Amazon Linux 2 doesn't have SELinux enabled by default
|
// Amazon Linux 2 doesn't have SELinux enabled by default
|
||||||
default:
|
default:
|
||||||
c.AddTask(&nodetasks.Package{Name: "container-selinux"})
|
c.AddTask(&nodetasks.Package{Name: "container-selinux"})
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SysctlBuilder set up our sysctls
|
// SysctlBuilder set up our sysctls
|
||||||
|
|
@ -125,7 +125,7 @@ func (b *SysctlBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
proxyMode = "iptables"
|
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,
|
sysctls = append(sysctls,
|
||||||
"# Flannel settings on CentOS 7",
|
"# Flannel settings on CentOS 7",
|
||||||
"# Issue https://github.com/coreos/flannel/issues/902",
|
"# Issue https://github.com/coreos/flannel/issues/902",
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,11 @@ limitations under the License.
|
||||||
package model
|
package model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/systemd"
|
"k8s.io/kops/pkg/systemd"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
"k8s.io/kops/upup/pkg/fi/nodeup/nodetasks"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
@ -39,7 +39,7 @@ var _ fi.ModelBuilder = &UpdateServiceBuilder{}
|
||||||
// Build is responsible for configuring automatic updates based on the OS.
|
// Build is responsible for configuring automatic updates based on the OS.
|
||||||
func (b *UpdateServiceBuilder) Build(c *fi.ModelBuilderContext) error {
|
func (b *UpdateServiceBuilder) Build(c *fi.ModelBuilderContext) error {
|
||||||
|
|
||||||
if b.Distribution == distros.DistributionFlatcar {
|
if b.Distribution == distributions.DistributionFlatcar {
|
||||||
b.buildFlatcarSystemdService(c)
|
b.buildFlatcarSystemdService(c)
|
||||||
} else if b.Distribution.IsDebianFamily() {
|
} else if b.Distribution.IsDebianFamily() {
|
||||||
b.buildDebianPackage(c)
|
b.buildDebianPackage(c)
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ go_library(
|
||||||
importpath = "k8s.io/kops/upup/pkg/fi/nodeup",
|
importpath = "k8s.io/kops/upup/pkg/fi/nodeup",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//nodeup/pkg/distros:go_default_library",
|
|
||||||
"//nodeup/pkg/model:go_default_library",
|
"//nodeup/pkg/model:go_default_library",
|
||||||
"//nodeup/pkg/model/networking:go_default_library",
|
"//nodeup/pkg/model/networking:go_default_library",
|
||||||
"//pkg/apis/kops: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/secrets:go_default_library",
|
||||||
"//upup/pkg/fi/utils:go_default_library",
|
"//upup/pkg/fi/utils:go_default_library",
|
||||||
"//util/pkg/architectures:go_default_library",
|
"//util/pkg/architectures:go_default_library",
|
||||||
|
"//util/pkg/distributions:go_default_library",
|
||||||
"//util/pkg/vfs: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:go_default_library",
|
||||||
"//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library",
|
"//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library",
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/nodeup/pkg/model"
|
"k8s.io/kops/nodeup/pkg/model"
|
||||||
"k8s.io/kops/nodeup/pkg/model/networking"
|
"k8s.io/kops/nodeup/pkg/model/networking"
|
||||||
api "k8s.io/kops/pkg/apis/kops"
|
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/secrets"
|
||||||
"k8s.io/kops/upup/pkg/fi/utils"
|
"k8s.io/kops/upup/pkg/fi/utils"
|
||||||
"k8s.io/kops/util/pkg/architectures"
|
"k8s.io/kops/util/pkg/architectures"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"k8s.io/kops/util/pkg/vfs"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"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)
|
return fmt.Errorf("error determining OS architecture: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
distribution, err := distros.FindDistribution("/")
|
distribution, err := distributions.FindDistribution("/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error determining OS distribution: %v", err)
|
return fmt.Errorf("error determining OS distribution: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ go_library(
|
||||||
importpath = "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks",
|
importpath = "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//nodeup/pkg/distros:go_default_library",
|
|
||||||
"//pkg/apis/kops:go_default_library",
|
"//pkg/apis/kops:go_default_library",
|
||||||
"//pkg/apis/nodeup:go_default_library",
|
"//pkg/apis/nodeup:go_default_library",
|
||||||
"//pkg/backoff: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/cloudinit:go_default_library",
|
||||||
"//upup/pkg/fi/nodeup/local:go_default_library",
|
"//upup/pkg/fi/nodeup/local:go_default_library",
|
||||||
"//upup/pkg/fi/utils:go_default_library",
|
"//upup/pkg/fi/utils:go_default_library",
|
||||||
|
"//util/pkg/distributions:go_default_library",
|
||||||
"//util/pkg/hashing:go_default_library",
|
"//util/pkg/hashing:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
"//vendor/k8s.io/klog/v2:go_default_library",
|
"//vendor/k8s.io/klog/v2:go_default_library",
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,11 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
|
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
"k8s.io/kops/util/pkg/hashing"
|
"k8s.io/kops/util/pkg/hashing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -129,7 +129,7 @@ func (p *Package) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Package) Find(c *fi.Context) (*Package, error) {
|
func (e *Package) Find(c *fi.Context) (*Package, error) {
|
||||||
d, err := distros.FindDistribution("/")
|
d, err := distributions.FindDistribution("/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unknown or unsupported distro: %v", err)
|
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()
|
packageManagerLock.Lock()
|
||||||
defer packageManagerLock.Unlock()
|
defer packageManagerLock.Unlock()
|
||||||
|
|
||||||
d, err := distros.FindDistribution("/")
|
d, err := distributions.FindDistribution("/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unknown or unsupported distro: %v", err)
|
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"}
|
args = []string{"apt-get", "install", "--yes", "--no-install-recommends"}
|
||||||
env = append(env, "DEBIAN_FRONTEND=noninteractive")
|
env = append(env, "DEBIAN_FRONTEND=noninteractive")
|
||||||
} else if d.IsRHELFamily() {
|
} 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"}
|
args = []string{"/usr/bin/dnf", "install", "-y", "--setopt=install_weak_deps=False"}
|
||||||
} else {
|
} else {
|
||||||
args = []string{"/usr/bin/yum", "install", "-y"}
|
args = []string{"/usr/bin/yum", "install", "-y"}
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
|
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
@ -127,7 +127,7 @@ func getSystemdStatus(name string) (map[string]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Service) systemdSystemPath() (string, error) {
|
func (e *Service) systemdSystemPath() (string, error) {
|
||||||
d, err := distros.FindDistribution("/")
|
d, err := distributions.FindDistribution("/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("unknown or unsupported distro: %v", err)
|
return "", fmt.Errorf("unknown or unsupported distro: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -136,9 +136,9 @@ func (e *Service) systemdSystemPath() (string, error) {
|
||||||
return debianSystemdSystemPath, nil
|
return debianSystemdSystemPath, nil
|
||||||
} else if d.IsRHELFamily() {
|
} else if d.IsRHELFamily() {
|
||||||
return centosSystemdSystemPath, nil
|
return centosSystemdSystemPath, nil
|
||||||
} else if d == distros.DistributionFlatcar {
|
} else if d == distributions.DistributionFlatcar {
|
||||||
return flatcarSystemdSystemPath, nil
|
return flatcarSystemdSystemPath, nil
|
||||||
} else if d == distros.DistributionContainerOS {
|
} else if d == distributions.DistributionContainerOS {
|
||||||
return containerosSystemdSystemPath, nil
|
return containerosSystemdSystemPath, nil
|
||||||
} else {
|
} else {
|
||||||
return "", fmt.Errorf("unsupported systemd system")
|
return "", fmt.Errorf("unsupported systemd system")
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,10 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/nodeup/pkg/distros"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
|
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
|
||||||
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
"k8s.io/kops/upup/pkg/fi/nodeup/local"
|
||||||
|
"k8s.io/kops/util/pkg/distributions"
|
||||||
)
|
)
|
||||||
|
|
||||||
type UpdatePackages struct {
|
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")
|
klog.Infof("SKIP_PACKAGE_UPDATE was set; skipping package update")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
d, err := distros.FindDistribution("/")
|
d, err := distributions.FindDistribution("/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unknown or unsupported distro: %v", err)
|
return fmt.Errorf("unknown or unsupported distro: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,4 @@ go_library(
|
||||||
srcs = ["architectures.go"],
|
srcs = ["architectures.go"],
|
||||||
importpath = "k8s.io/kops/util/pkg/architectures",
|
importpath = "k8s.io/kops/util/pkg/architectures",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = ["//vendor/k8s.io/klog/v2:go_default_library"],
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,11 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Architecture string
|
type Architecture string
|
||||||
|
|
||||||
var (
|
const (
|
||||||
ArchitectureAmd64 Architecture = "amd64"
|
ArchitectureAmd64 Architecture = "amd64"
|
||||||
ArchitectureArm64 Architecture = "arm64"
|
ArchitectureArm64 Architecture = "arm64"
|
||||||
)
|
)
|
||||||
|
|
@ -58,19 +56,3 @@ func GetSupported() []Architecture {
|
||||||
ArchitectureArm64,
|
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
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -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"],
|
||||||
|
)
|
||||||
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package distros
|
package distributions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
|
@ -22,12 +22,12 @@ import (
|
||||||
|
|
||||||
type Distribution string
|
type Distribution string
|
||||||
|
|
||||||
var (
|
const (
|
||||||
DistributionDebian9 Distribution = "debian9"
|
DistributionDebian9 Distribution = "stretch"
|
||||||
DistributionDebian10 Distribution = "buster"
|
DistributionDebian10 Distribution = "buster"
|
||||||
DistributionXenial Distribution = "xenial"
|
DistributionUbuntu1604 Distribution = "xenial"
|
||||||
DistributionBionic Distribution = "bionic"
|
DistributionUbuntu1804 Distribution = "bionic"
|
||||||
DistributionFocal Distribution = "focal"
|
DistributionUbuntu2004 Distribution = "focal"
|
||||||
DistributionAmazonLinux2 Distribution = "amazonlinux2"
|
DistributionAmazonLinux2 Distribution = "amazonlinux2"
|
||||||
DistributionRhel7 Distribution = "rhel7"
|
DistributionRhel7 Distribution = "rhel7"
|
||||||
DistributionCentos7 Distribution = "centos7"
|
DistributionCentos7 Distribution = "centos7"
|
||||||
|
|
@ -41,7 +41,7 @@ func (d Distribution) IsDebianFamily() bool {
|
||||||
switch d {
|
switch d {
|
||||||
case DistributionDebian9, DistributionDebian10:
|
case DistributionDebian9, DistributionDebian10:
|
||||||
return true
|
return true
|
||||||
case DistributionXenial, DistributionBionic, DistributionFocal:
|
case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004:
|
||||||
return true
|
return true
|
||||||
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
||||||
return false
|
return false
|
||||||
|
|
@ -57,7 +57,7 @@ func (d Distribution) IsUbuntu() bool {
|
||||||
switch d {
|
switch d {
|
||||||
case DistributionDebian9, DistributionDebian10:
|
case DistributionDebian9, DistributionDebian10:
|
||||||
return false
|
return false
|
||||||
case DistributionXenial, DistributionBionic, DistributionFocal:
|
case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004:
|
||||||
return true
|
return true
|
||||||
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
||||||
return false
|
return false
|
||||||
|
|
@ -73,7 +73,7 @@ func (d Distribution) IsRHELFamily() bool {
|
||||||
switch d {
|
switch d {
|
||||||
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
||||||
return true
|
return true
|
||||||
case DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10:
|
case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004, DistributionDebian9, DistributionDebian10:
|
||||||
return false
|
return false
|
||||||
case DistributionFlatcar, DistributionContainerOS:
|
case DistributionFlatcar, DistributionContainerOS:
|
||||||
return false
|
return false
|
||||||
|
|
@ -85,7 +85,7 @@ func (d Distribution) IsRHELFamily() bool {
|
||||||
|
|
||||||
func (d Distribution) IsSystemd() bool {
|
func (d Distribution) IsSystemd() bool {
|
||||||
switch d {
|
switch d {
|
||||||
case DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10:
|
case DistributionUbuntu1604, DistributionUbuntu1804, DistributionUbuntu2004, DistributionDebian9, DistributionDebian10:
|
||||||
return true
|
return true
|
||||||
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
|
||||||
return true
|
return true
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
filegroup(
|
||||||
|
name = "exported_testdata",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
@ -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/"
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
|
@ -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"
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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/"
|
||||||
|
|
@ -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/"
|
||||||
|
|
@ -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/"
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
Loading…
Reference in New Issue