Merge pull request #1486 from justinsb/split_out_distros

Split out distros into its own package
This commit is contained in:
Chris Love 2017-01-16 13:16:17 -07:00 committed by GitHub
commit 51b764468c
6 changed files with 54 additions and 85 deletions

View File

@ -16,6 +16,7 @@ k8s.io/kops/federation
k8s.io/kops/federation/model k8s.io/kops/federation/model
k8s.io/kops/federation/targets/kubernetes k8s.io/kops/federation/targets/kubernetes
k8s.io/kops/federation/tasks k8s.io/kops/federation/tasks
k8s.io/kops/nodeup/pkg/distros
k8s.io/kops/nodeup/pkg/model k8s.io/kops/nodeup/pkg/model
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

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package model package distros
import ( import (
"github.com/golang/glog" "github.com/golang/glog"
@ -28,6 +28,7 @@ var (
DistributionXenial Distribution = "xenial" DistributionXenial Distribution = "xenial"
DistributionRhel7 Distribution = "rhel7" DistributionRhel7 Distribution = "rhel7"
DistributionCentos7 Distribution = "centos7" DistributionCentos7 Distribution = "centos7"
DistributionCoreOS Distribution = "coreos"
) )
func (d Distribution) BuildTags() []string { func (d Distribution) BuildTags() []string {
@ -42,6 +43,8 @@ func (d Distribution) BuildTags() []string {
t = []string{"_centos7"} t = []string{"_centos7"}
case DistributionRhel7: case DistributionRhel7:
t = []string{"_rhel7"} t = []string{"_rhel7"}
case DistributionCoreOS:
t = []string{"_coreos"}
default: default:
glog.Fatalf("unknown distribution: %s", d) glog.Fatalf("unknown distribution: %s", d)
return nil return nil
@ -64,7 +67,7 @@ func (d Distribution) IsDebianFamily() bool {
switch d { switch d {
case DistributionJessie, DistributionXenial: case DistributionJessie, DistributionXenial:
return true return true
case DistributionCentos7, DistributionRhel7: case DistributionCentos7, DistributionRhel7, DistributionCoreOS:
return false return false
default: default:
glog.Fatalf("unknown distribution: %s", d) glog.Fatalf("unknown distribution: %s", d)
@ -74,10 +77,10 @@ func (d Distribution) IsDebianFamily() bool {
func (d Distribution) IsRHELFamily() bool { func (d Distribution) IsRHELFamily() bool {
switch d { switch d {
case DistributionJessie, DistributionXenial:
return false
case DistributionCentos7, DistributionRhel7: case DistributionCentos7, DistributionRhel7:
return true return true
case DistributionJessie, DistributionXenial, DistributionCoreOS:
return false
default: default:
glog.Fatalf("unknown distribution: %s", d) glog.Fatalf("unknown distribution: %s", d)
return false return false
@ -89,7 +92,9 @@ func (d Distribution) IsSystemd() bool {
case DistributionJessie, DistributionXenial: case DistributionJessie, DistributionXenial:
return true return true
case DistributionCentos7, DistributionRhel7: case DistributionCentos7, DistributionRhel7:
return false return true
case DistributionCoreOS:
return true
default: default:
glog.Fatalf("unknown distribution: %s", d) glog.Fatalf("unknown distribution: %s", d)
return false return false

View File

@ -14,13 +14,12 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package nodeup package distros
import ( import (
"fmt" "fmt"
"github.com/golang/glog" "github.com/golang/glog"
"io/ioutil" "io/ioutil"
"k8s.io/kops/nodeup/pkg/model"
"os" "os"
"path" "path"
"strings" "strings"
@ -28,14 +27,14 @@ import (
// FindDistribution identifies the distribution on which we are running // FindDistribution identifies the distribution on which we are running
// We will likely remove this when everything is containerized // We will likely remove this when everything is containerized
func FindDistribution(rootfs string) (model.Distribution, error) { func FindDistribution(rootfs string) (Distribution, error) {
// Ubuntu has /etc/lsb-release (and /etc/debian_version) // Ubuntu has /etc/lsb-release (and /etc/debian_version)
lsbRelease, err := ioutil.ReadFile(path.Join(rootfs, "etc/lsb-release")) lsbRelease, err := ioutil.ReadFile(path.Join(rootfs, "etc/lsb-release"))
if err == nil { if err == nil {
for _, line := range strings.Split(string(lsbRelease), "\n") { for _, line := range strings.Split(string(lsbRelease), "\n") {
line = strings.TrimSpace(line) line = strings.TrimSpace(line)
if line == "DISTRIB_CODENAME=xenial" { if line == "DISTRIB_CODENAME=xenial" {
return model.DistributionXenial, nil return DistributionXenial, nil
} }
} }
glog.Warningf("unhandled lsb-release info %q", string(lsbRelease)) glog.Warningf("unhandled lsb-release info %q", string(lsbRelease))
@ -48,7 +47,7 @@ func FindDistribution(rootfs string) (model.Distribution, error) {
if err == nil { if err == nil {
debianVersion := strings.TrimSpace(string(debianVersionBytes)) debianVersion := strings.TrimSpace(string(debianVersionBytes))
if strings.HasPrefix(debianVersion, "8.") { if strings.HasPrefix(debianVersion, "8.") {
return model.DistributionJessie, nil return DistributionJessie, nil
} else { } else {
return "", fmt.Errorf("unhandled debian version %q", debianVersion) return "", fmt.Errorf("unhandled debian version %q", debianVersion)
} }
@ -63,10 +62,10 @@ func FindDistribution(rootfs string) (model.Distribution, error) {
for _, line := range strings.Split(string(redhatRelease), "\n") { for _, line := range strings.Split(string(redhatRelease), "\n") {
line = strings.TrimSpace(line) line = strings.TrimSpace(line)
if strings.HasPrefix(line, "Red Hat Enterprise Linux Server release 7.") { if strings.HasPrefix(line, "Red Hat Enterprise Linux Server release 7.") {
return model.DistributionRhel7, nil return DistributionRhel7, nil
} }
if strings.HasPrefix(line, "CentOS Linux release 7.") { if strings.HasPrefix(line, "CentOS Linux release 7.") {
return model.DistributionCentos7, nil return DistributionCentos7, nil
} }
} }
glog.Warningf("unhandled redhat-release info %q", string(lsbRelease)) glog.Warningf("unhandled redhat-release info %q", string(lsbRelease))
@ -74,60 +73,19 @@ func FindDistribution(rootfs string) (model.Distribution, error) {
glog.Warningf("error reading /etc/redhat-release: %v", err) glog.Warningf("error reading /etc/redhat-release: %v", err)
} }
// CoreOS uses /usr/lib/os-release
osRelease, err := ioutil.ReadFile(path.Join(rootfs, "usr/lib/os-release"))
if err == nil {
for _, line := range strings.Split(string(osRelease), "\n") {
line = strings.TrimSpace(line)
if line == "ID=coreos" {
return DistributionCoreOS, nil
}
}
glog.Warningf("unhandled os-release info %q", string(osRelease))
} else if !os.IsNotExist(err) {
glog.Warningf("error reading /usr/lib/os-release: %v", err)
}
return "", fmt.Errorf("cannot identify distro") return "", fmt.Errorf("cannot identify distro")
} }
//// FindCloudTags infers tags from the cloud environment
//func FindCloudTags(rootfs string) ([]string, error) {
// productVersionBytes, err := ioutil.ReadFile(path.Join(rootfs, "sys/class/dmi/id/product_version"))
// if err == nil {
// productVersion := strings.TrimSpace(string(productVersionBytes))
// switch productVersion {
// case "amazon":
// return findCloudTagsAWS(rootfs)
// default:
// glog.V(2).Infof("Unknown /sys/class/dmi/id/product_version %q", productVersion)
// }
// } else if !os.IsNotExist(err) {
// glog.Infof("error reading /sys/class/dmi/id/product_version: %v", err)
// }
// return nil, fmt.Errorf("cannot identify cloud")
//}
//
//type awsIAMInfo struct {
// Code string
// LastUpdated string
// InstanceProfileArn string
// InstanceProfileId string
//}
//
//// findAWSCloudTags infers cloud tags once we have determined we are on AWS
//func findCloudTagsAWS(rootfs string) ([]string, error) {
// tags := []string{"_aws"}
//
// // We can't get the tags, annoyingly
//
// iamInfoBytes, err := vfs.Context.ReadFile("http://169.254.169.254/2016-04-19/meta-data/iam/info")
// if err != nil {
// return nil, fmt.Errorf("error querying for iam info: %v", err)
// }
//
// iamInfo := &awsIAMInfo{}
// if err := json.Unmarshal(iamInfoBytes, iamInfo); err != nil {
// glog.Infof("Invalid IAM info: %q", string(iamInfoBytes))
// return nil, fmt.Errorf("error decoding iam info: %v", err)
// }
//
// arn := iamInfo.InstanceProfileArn
// if strings.HasSuffix(arn, "-masters") {
// tags = append(tags, "_master")
// } else if strings.HasSuffix(arn, "-nodes") {
// tags = append(tags, "_master")
// } else {
// return nil, fmt.Errorf("unexpected IAM role name %q", arn)
// }
//
// return tags, nil
//}
//
//

View File

@ -16,10 +16,13 @@ limitations under the License.
package model package model
import "k8s.io/kops/pkg/apis/kops" import (
"k8s.io/kops/nodeup/pkg/distros"
"k8s.io/kops/pkg/apis/kops"
)
type NodeupModelContext struct { type NodeupModelContext struct {
Cluster *kops.Cluster Cluster *kops.Cluster
Architecture Architecture Architecture Architecture
Distribution Distribution Distribution distros.Distribution
} }

View File

@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"github.com/blang/semver" "github.com/blang/semver"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kops/nodeup/pkg/distros"
"k8s.io/kops/nodeup/pkg/model/resources" "k8s.io/kops/nodeup/pkg/model/resources"
"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"
@ -39,7 +40,7 @@ type dockerVersion struct {
Hash string Hash string
DockerVersion string DockerVersion string
Distros []Distribution Distros []distros.Distribution
Dependencies []string Dependencies []string
Architectures []Architecture Architectures []Architecture
} }
@ -51,7 +52,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.11.2", DockerVersion: "1.11.2",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionJessie}, Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.11.2-0~jessie", Version: "1.11.2-0~jessie",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.11.2-0~jessie_amd64.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.11.2-0~jessie_amd64.deb",
@ -63,7 +64,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.11.2", DockerVersion: "1.11.2",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionXenial}, Distros: []distros.Distribution{distros.DistributionXenial},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.11.2-0~xenial", Version: "1.11.2-0~xenial",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.11.2-0~xenial_amd64.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.11.2-0~xenial_amd64.deb",
@ -75,7 +76,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.11.2", DockerVersion: "1.11.2",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionRhel7, DistributionCentos7}, Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.11.2", Version: "1.11.2",
Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.11.2-1.el7.centos.x86_64.rpm", Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.11.2-1.el7.centos.x86_64.rpm",
@ -85,7 +86,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.11.2", DockerVersion: "1.11.2",
Name: "docker-engine-selinux", Name: "docker-engine-selinux",
Distros: []Distribution{DistributionRhel7, DistributionCentos7}, Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.11.2", Version: "1.11.2",
Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.11.2-1.el7.centos.noarch.rpm", Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.11.2-1.el7.centos.noarch.rpm",
@ -96,7 +97,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.1", DockerVersion: "1.12.1",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionJessie}, Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.1-0~jessie", Version: "1.12.1-0~jessie",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.1-0~jessie_amd64.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.1-0~jessie_amd64.deb",
@ -108,7 +109,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.1", DockerVersion: "1.12.1",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionXenial}, Distros: []distros.Distribution{distros.DistributionXenial},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.1-0~xenial", Version: "1.12.1-0~xenial",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.1-0~xenial_amd64.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.1-0~xenial_amd64.deb",
@ -120,7 +121,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.1", DockerVersion: "1.12.1",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionRhel7, DistributionCentos7}, Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.1", Version: "1.12.1",
Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.1-1.el7.centos.x86_64.rpm", Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.1-1.el7.centos.x86_64.rpm",
@ -130,7 +131,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.1", DockerVersion: "1.12.1",
Name: "docker-engine-selinux", Name: "docker-engine-selinux",
Distros: []Distribution{DistributionRhel7, DistributionCentos7}, Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.1", Version: "1.12.1",
Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm", Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm",
@ -141,7 +142,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.3", DockerVersion: "1.12.3",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionJessie}, Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.3-0~jessie", Version: "1.12.3-0~jessie",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.3-0~jessie_amd64.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.3-0~jessie_amd64.deb",
@ -155,7 +156,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.3", DockerVersion: "1.12.3",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionJessie}, Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureArm}, Architectures: []Architecture{ArchitectureArm},
Version: "1.12.3-0~jessie", Version: "1.12.3-0~jessie",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.3-0~jessie_armhf.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.3-0~jessie_armhf.deb",
@ -167,7 +168,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.3", DockerVersion: "1.12.3",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionXenial}, Distros: []distros.Distribution{distros.DistributionXenial},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.3-0~xenial", Version: "1.12.3-0~xenial",
Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.3-0~xenial_amd64.deb", Source: "http://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.3-0~xenial_amd64.deb",
@ -179,7 +180,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.3", DockerVersion: "1.12.3",
Name: "docker-engine", Name: "docker-engine",
Distros: []Distribution{DistributionRhel7, DistributionCentos7}, Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.3", Version: "1.12.3",
Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.3-1.el7.centos.x86_64.rpm", Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.3-1.el7.centos.x86_64.rpm",
@ -189,7 +190,7 @@ var dockerVersions = []dockerVersion{
{ {
DockerVersion: "1.12.3", DockerVersion: "1.12.3",
Name: "docker-engine-selinux", Name: "docker-engine-selinux",
Distros: []Distribution{DistributionRhel7, DistributionCentos7}, Distros: []distros.Distribution{distros.DistributionRhel7, distros.DistributionCentos7},
Architectures: []Architecture{ArchitectureAmd64}, Architectures: []Architecture{ArchitectureAmd64},
Version: "1.12.3", Version: "1.12.3",
Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.3-1.el7.centos.noarch.rpm", Source: "https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.3-1.el7.centos.noarch.rpm",
@ -197,7 +198,7 @@ var dockerVersions = []dockerVersion{
}, },
} }
func (d *dockerVersion) matches(arch Architecture, dockerVersion string, distro Distribution) bool { func (d *dockerVersion) matches(arch Architecture, dockerVersion string, distro distros.Distribution) bool {
if d.DockerVersion != dockerVersion { if d.DockerVersion != dockerVersion {
return false return false
} }

View File

@ -26,6 +26,7 @@ import (
"time" "time"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kops/nodeup/pkg/distros"
"k8s.io/kops/nodeup/pkg/model" "k8s.io/kops/nodeup/pkg/model"
api "k8s.io/kops/pkg/apis/kops" api "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/apis/kops/registry" "k8s.io/kops/pkg/apis/kops/registry"
@ -173,7 +174,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error {
// c.Config.Tags = append(c.Config.Tags, "_not_config_store") // c.Config.Tags = append(c.Config.Tags, "_not_config_store")
//} //}
distribution, err := FindDistribution(c.FSRoot) distribution, err := distros.FindDistribution(c.FSRoot)
if err != nil { if err != nil {
return fmt.Errorf("error determining OS distribution: %v", err) return fmt.Errorf("error determining OS distribution: %v", err)
} }