Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

baremetal: fill out more of the baremetal mappings #3406

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions pkg/apis/kops/validation/legacy.go
Original file line number Diff line number Diff line change
Expand Up @@ -249,28 +249,40 @@ func ValidateCluster(c *kops.Cluster, strict bool) *field.Error {

// Check CloudProvider
{
cloudProvider := c.Spec.CloudProvider

if cloudProvider == "" {
return field.Required(fieldSpec.Child("CloudProvider"), "")
var k8sCloudProvider string
switch kops.CloudProviderID(c.Spec.CloudProvider) {
case kops.CloudProviderAWS:
k8sCloudProvider = "aws"
case kops.CloudProviderGCE:
k8sCloudProvider = "gce"
case kops.CloudProviderDO:
k8sCloudProvider = "external"
case kops.CloudProviderVSphere:
k8sCloudProvider = "vsphere"
case kops.CloudProviderBareMetal:
k8sCloudProvider = ""
default:
return field.Invalid(fieldSpec.Child("CloudProvider"), c.Spec.CloudProvider, "unknown cloudprovider")
}

if c.Spec.Kubelet != nil && (strict || c.Spec.Kubelet.CloudProvider != "") {
if cloudProvider != c.Spec.Kubelet.CloudProvider && c.Spec.Kubelet.CloudProvider != "external" {
if k8sCloudProvider != c.Spec.Kubelet.CloudProvider {
return field.Invalid(fieldSpec.Child("Kubelet", "CloudProvider"), c.Spec.Kubelet.CloudProvider, "Did not match cluster CloudProvider")
}
}
if c.Spec.MasterKubelet != nil && (strict || c.Spec.MasterKubelet.CloudProvider != "") {
if cloudProvider != c.Spec.MasterKubelet.CloudProvider && c.Spec.MasterKubelet.CloudProvider != "external" {
if k8sCloudProvider != c.Spec.MasterKubelet.CloudProvider {
return field.Invalid(fieldSpec.Child("MasterKubelet", "CloudProvider"), c.Spec.MasterKubelet.CloudProvider, "Did not match cluster CloudProvider")
}
}
if c.Spec.KubeAPIServer != nil && (strict || c.Spec.KubeAPIServer.CloudProvider != "") {
if cloudProvider != c.Spec.KubeAPIServer.CloudProvider && c.Spec.KubeAPIServer.CloudProvider != "external" {
if k8sCloudProvider != c.Spec.KubeAPIServer.CloudProvider {
return field.Invalid(fieldSpec.Child("KubeAPIServer", "CloudProvider"), c.Spec.KubeAPIServer.CloudProvider, "Did not match cluster CloudProvider")
}
}
if c.Spec.KubeControllerManager != nil && (strict || c.Spec.KubeControllerManager.CloudProvider != "") {
if cloudProvider != c.Spec.KubeControllerManager.CloudProvider && c.Spec.KubeControllerManager.CloudProvider != "external" {
if k8sCloudProvider != c.Spec.KubeControllerManager.CloudProvider {
return field.Invalid(fieldSpec.Child("KubeControllerManager", "CloudProvider"), c.Spec.KubeControllerManager.CloudProvider, "Did not match cluster CloudProvider")
}
}
Expand Down
4 changes: 3 additions & 1 deletion pkg/model/components/apiserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,10 @@ func (b *KubeAPIServerOptionsBuilder) BuildOptions(o interface{}) error {
c.CloudProvider = "external"
case kops.CloudProviderVSphere:
c.CloudProvider = "vsphere"
case kops.CloudProviderBareMetal:
// for baremetal, we don't specify a cloudprovider to apiserver
default:
return fmt.Errorf("unknown cloud provider %q", clusterSpec.CloudProvider)
return fmt.Errorf("unknown cloudprovider %q", clusterSpec.CloudProvider)
}

c.LogLevel = 2
Expand Down
5 changes: 4 additions & 1 deletion pkg/model/components/kubecontrollermanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,11 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o interface{}) error
case kops.CloudProviderVSphere:
kcm.CloudProvider = "vsphere"

case kops.CloudProviderBareMetal:
// No cloudprovider

default:
return fmt.Errorf("unknown cloud provider %q", clusterSpec.CloudProvider)
return fmt.Errorf("unknown cloudprovider %q", clusterSpec.CloudProvider)
}

if kcm.Master == "" {
Expand Down
3 changes: 3 additions & 0 deletions pkg/model/master_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"sort"
"strings"

"github.com/golang/glog"
"k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
Expand Down Expand Up @@ -95,6 +96,8 @@ func (b *MasterVolumeBuilder) Build(c *fi.ModelBuilderContext) error {
b.addGCEVolume(c, name, volumeSize, subnet, etcd, m, allMembers)
case kops.CloudProviderVSphere:
b.addVSphereVolume(c, name, volumeSize, subnet, etcd, m, allMembers)
case kops.CloudProviderBareMetal:
glog.Fatalf("BareMetal not implemented")
default:
return fmt.Errorf("unknown cloudprovider %q", b.Cluster.Spec.CloudProvider)
}
Expand Down
11 changes: 11 additions & 0 deletions upup/pkg/fi/cloudup/apply_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ const (
)

var (
// AlphaAllowBareMetal is a feature flag that gates BareMetal support while it is alpha
AlphaAllowBareMetal = featureflag.New("AlphaAllowBareMetal", featureflag.Bool(false))
// AlphaAllowDO is a feature flag that gates DigitalOcean support while it is alpha
AlphaAllowDO = featureflag.New("AlphaAllowDO", featureflag.Bool(false))
// AlphaAllowGCE is a feature flag that gates GCE support while it is alpha
Expand Down Expand Up @@ -409,6 +411,15 @@ func (c *ApplyClusterCmd) Run() error {
})
}

case kops.CloudProviderBareMetal:
{
if !AlphaAllowBareMetal.Enabled() {
return fmt.Errorf("BareMetal support is currently (very) alpha and is feature-gated. export KOPS_FEATURE_FLAGS=AlphaAllowBareMetal to enable it")
}

// No additional tasks (yet)
}

default:
return fmt.Errorf("unknown CloudProvider %q", cluster.Spec.CloudProvider)
}
Expand Down
13 changes: 8 additions & 5 deletions upup/pkg/fi/cloudup/tagbuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,28 @@ func buildCloudupTags(cluster *api.Cluster) (sets.String, error) {
return nil, fmt.Errorf("no networking mode set")
}

switch cluster.Spec.CloudProvider {
case "gce":
switch api.CloudProviderID(cluster.Spec.CloudProvider) {
case api.CloudProviderGCE:
{
tags.Insert("_gce")
}

case "aws":
case api.CloudProviderAWS:
{
tags.Insert("_aws")
}
case "digitalocean":
case api.CloudProviderDO:
{
tags.Insert("_do")
}
case "vsphere":
case api.CloudProviderVSphere:
{
tags.Insert("_vsphere")
}

case api.CloudProviderBareMetal:
// No tags

default:
return nil, fmt.Errorf("unknown CloudProvider %q", cluster.Spec.CloudProvider)
}
Expand Down
12 changes: 6 additions & 6 deletions upup/pkg/fi/cloudup/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) {
region := ""
project := ""

switch cluster.Spec.CloudProvider {
case "gce":
switch kops.CloudProviderID(cluster.Spec.CloudProvider) {
case kops.CloudProviderGCE:
{
nodeZones := make(map[string]bool)
for _, subnet := range cluster.Spec.Subnets {
Expand Down Expand Up @@ -71,7 +71,7 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) {
cloud = gceCloud
}

case "aws":
case kops.CloudProviderAWS:
{
region, err := awsup.FindRegion(cluster)
if err != nil {
Expand Down Expand Up @@ -100,15 +100,15 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) {
}
cloud = awsCloud
}
case "vsphere":
case kops.CloudProviderVSphere:
{
vsphereCloud, err := vsphere.NewVSphereCloud(&cluster.Spec)
if err != nil {
return nil, err
}
cloud = vsphereCloud
}
case "digitalocean":
case kops.CloudProviderDO:
{
// for development purposes we're going to assume
// single region setups for DO. Reconsider this logic
Expand All @@ -122,7 +122,7 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) {
cloud = doCloud
}

case string(kops.CloudProviderBareMetal):
case kops.CloudProviderBareMetal:
{
// TODO: Allow dns provider to be specified
dns, err := dnsprovider.GetDnsProvider(route53.ProviderName, nil)
Expand Down